• des加密+base64编码,base64解码+des解密


    des简单介绍

    des对称加密,是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码(称为对称密码),是一种对称加密算法。


    DES加密算法出自IBM的研究,后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为DES使用56位密钥,以现代计算能力,很轻松即可被破解。虽然如此,在某些简单应用中,我们还是可以使用DES加密算法,本文简单讲解DES的JAVA实现。


    PS:des被证明是可以破解的,明文+密钥=密文,这个公式只要知道任何两个,就可以推导出第三个,在已经知道明文和对应密文的情况下,通过穷举和暴力破解是可以破解des的。


    注意:des加密和解密过程中,密钥长度都必须是8的倍数

    base64简单介绍

    Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。
    Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。


    base64编码:把二进制数据转为字符;
    base64解码:把字符转为二进制数据;

    运行效果图

    在这里插入图片描述

    TestActivity.java

    package top.gaojc;
    
    import top.gaojc.util.DataEncryptionUtil;
    
    public class MainActivity extends Activity {
    
        private String str = "迪迦,yyds,永远相信光!";
        private String s;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            findViewById(R.id.test).setOnClickListener(v -> {
            	//加密操作
            	s = DataEncryptionUtil.desEncrypt(str);
                System.out.println("原数据:" + str);
                System.out.println("加密后:" + s);
                /*
                //解密操作
                s = DataEncryptionUtil.desDecode(str);
                System.out.println("原数据:" + str);
                System.out.println("解密后:" + s);
                */
            });
        }
        
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    DataEncryptionUtil.java

    package top.gaojc.util;
    
    import android.util.Base64;
    import java.security.SecureRandom;
    import javax.crypto.Cipher;
    import javax.crypto.SecretKey;
    import javax.crypto.SecretKeyFactory;
    import javax.crypto.spec.DESKeySpec;
    
    //数据加密工具类
    public class DataEncryptionUtil {
    
        private static final String ENCRYPT_KEY = "12345xyz";//8位密钥
        private static final String DES = "DES";
    
        /**
         * des加密 + base64编码
         */
        public static String desEncrypt(String data) {
            String resultData = null;
            try {
                // des算法要求有一个可信任的随机数源
                SecureRandom random = new SecureRandom();
                // 创建DESKeySpec对象
                DESKeySpec desKeySpec = new DESKeySpec(ENCRYPT_KEY.getBytes());
                // 创建密钥工厂
                SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
                // 将DESKeySpec对象转换成SecretKey对象
                SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
                // Cipher对象完成加密操作
                Cipher cipher = Cipher.getInstance(DES);
                // 用密钥初始化Cipher对象
                cipher.init(Cipher.ENCRYPT_MODE, secretKey, random);
                // des数据加密
                byte[] bytesData = cipher.doFinal(data.getBytes("UTF-8"));
                // 进行Beas64编码处理
                resultData = Base64.encodeToString(bytesData, Base64.DEFAULT);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return resultData;
        }
    
    
        /**
         * base64解码 + des解密
         */
        public static String desDecode(String data) {
            String resultData = null;
    
            try {
                // base64解码
                byte[] bytes = Base64.decode(data, Base64.DEFAULT);
                // des算法要求有一个可信任的随机数源
                SecureRandom random = new SecureRandom();
                // 创建一个DESKeySpec对象
                DESKeySpec desKeySpec = new DESKeySpec(ENCRYPT_KEY.getBytes());
                // 创建一个密钥工厂
                SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
                // 将DESKeySpec对象转换成SecretKey对象
                SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
                // Cipher对象完成解密操作
                Cipher cipher = Cipher.getInstance(DES);
                // 用密匙初始化Cipher对象
                cipher.init(Cipher.DECRYPT_MODE, secretKey, random);
                // 解密
                byte[] bytesData = cipher.doFinal(bytes);
                resultData = new String(bytesData);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return resultData;
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
  • 相关阅读:
    TiDB 集群故障诊断
    redis集群的多key原子性操作如何实现?
    论,韭菜的自我修养
    SVN的基本使用
    睿伴科创上线了
    智慧防汛解决方案-最新全套文件
    kubernetes 踩坑记录
    Oracle/PLSQL: Extract Function
    Facebook广告被暂停是什么原因?Facebook广告账号被封怎么办?
    自动化测试的统筹规划
  • 原文地址:https://blog.csdn.net/Mr_Gaojinchao/article/details/126309370