常用加密方式DES、3DES、AES、MD5

最近需要用到加密这块,然后记录一下常用的加密,方便以后使用的时候,不要手忙脚乱的查找。

DES:数据加密标准,密钥偏短(56位)、生命周期短(避免被破解)。

3DES:密钥长度112位或168位,通过增加迭代次数提高安全性 。处理速度慢、密钥计算时间长、加密效率不高 。

AES:高级数据加密标准,能够有效抵御已知的针对DES算法的所有攻击 。密钥建立时间短、灵敏性好、内存需求低、安全性高 。

具体实现:

生成密钥

 try {
            //密钥生成器
            KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
            //初始化密钥长度
            keyGenerator.init(56);
            //生成密钥
            SecretKey secretKey = keyGenerator.generateKey();
            //密钥生成数组
            byte[] key = secretKey.getEncoded();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();

        }

加密

 //恢复密钥
        SecretKey secretKey = new SecretKeySpec(key, "DES");
        try {
            //Cipher 工具类
            Cipher cipher = Cipher.getInstance("DES");
            //初始化模式
            cipher.init(Cipher.ENCRYPT_MODE, secretKey);
            //加密 data加密内容
            byte[] cipherByte = cipher.doFinal(data);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();

        }

解密:

 //恢复密钥
        SecretKey secretKey = new SecretKeySpec(key, "DES");
        try {
            //Cipher 工具类
            Cipher cipher = Cipher.getInstance("DES");
            //初始化模式
            cipher.init(Cipher.DECRYPT_MODE, secretKey);
            //加密 data加密内容
            byte[] cipherByte = cipher.doFinal(data);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();

        }

DES、3DES、AES三种加密方式大致一致,只是在进行加解密时,放置不同的类型,具体如下:

  1. DES  类型 DES 
  2. 3DES  类型 DESede
  3. AES  类型 AES 

加密和解密用法一致,根据Cipher常量来区分。

  • ENCRYPT_MODE  加密常量
  • DECRYPT_MODE  解密常量
  • WRAP_MODE  包装常量
  • UNWRAP_MODE  密钥解包常量
  • PUBLIC_KEY  解包“公钥"常量
  • PRIVATE_KEY 解包”私钥“常量
  • SECRET_KEY  秘密密钥常量

MD5

加密:

          //确定计算方法

        MessageDigest md5=MessageDigest.getInstance("MD5");

        BASE64Encoder base64en = new BASE64Encoder();

        //加密后的字符串
        String newstr=base64en.encode(md5.digest(str.getBytes("utf-8")));

        //加密后的字符串
        String newstr=base64en.encode(md5.digest(str.getBytes("utf-8")));

        BASE64Encoder base64en = new BASE64Encoder();

        //加密后的字符串
        String newstr=base64en.encode(md5.digest(str.getBytes("utf-8")));

        //加密后的字符串

        String newstr=base64en.encode(md5.digest(str.getBytes("utf-8")));





猜你喜欢

转载自blog.csdn.net/qq_33240767/article/details/80730654