Java中的加密算法(二)

作者: 慕涵盛华 | 来源:发表于2017-03-15 14:28 被阅读132次

1.对称加密算法
1.1对称加密算法-DES

在Java中的加密算法(一)中主要讲解了密码中常用的术语,Java安全组成,Base64加密算法以及消息摘要算法。上文中主要讲解的是一些常用的算法,其实还有很多算法,可以自行了解。本文主要讲解的是对称加密算法和非对称的加密算法。对称和非对称指的是加密密钥和解密密钥。如果加密密钥和解密密钥相同,则称为对称,反之为非对称。

1.对称加密算法

发送方便使用密钥对明文加密,然后接收方便使用相同的密钥对密文解密。发送方和接收方使用的密钥为同一个。是一种初等的加密算法,安全性不是特别的高。

  • 常用的加密算法
  • <b>DES(数据加密标准)</b>:DES为最早期的加密算法,由美国国家标准局制定,由于密钥的长度不够,后被3DES替代
  • <b>3DES</b>:3DES为升级版,改进了算法和安全性
  • <b>AES</b>:AES由两位比利时密码学家设计,后来被美国联邦政府采用的一种加密算法。

1.1 对称加密算法-DES

DES对称加密算法.png
/**
 * 使用JDK实现DES(对称加密算法)加密
 * @param src
 */
public static void jdkDES(String src) {
    try {
        //生成Key
        KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
        keyGenerator.init(56);//设置长度
        SecretKey secretKey = keyGenerator.generateKey();
        byte[] keyBytes = secretKey.getEncoded();
        
        //key转换
        DESKeySpec desKeySpec = new DESKeySpec(keyBytes);
        SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("DES");
        SecretKey generateSecret = secretKeyFactory.generateSecret(desKeySpec);
        
        //加密
        Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, generateSecret);
        byte[] result = cipher.doFinal(src.getBytes());
        System.out.println(Hex.encodeHexString(result));
        
        //解密
        cipher.init(Cipher.DECRYPT_MODE,generateSecret);//使用同一个key
        result = cipher.doFinal(result);
        System.out.println(new String(result));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

三方-Bouncy Castle实现

/**
 * 使用Bouncy Castle实现DES(对称加密算法)加密
 * @param src
 */
public static void jdkDES(String src) {
    try {
        Security.addProvider(new BouncyCastleProvider());//引入Bouncy Castle
        //生成Key
        KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
        keyGenerator.getProvider();
        keyGenerator.init(56);//设置长度
        SecretKey secretKey = keyGenerator.generateKey();
        byte[] keyBytes = secretKey.getEncoded();
        
        //key转换
        DESKeySpec desKeySpec = new DESKeySpec(keyBytes);
        SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("DES");
        SecretKey generateSecret = secretKeyFactory.generateSecret(desKeySpec);
        
        //加密
        Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, generateSecret);
        byte[] result = cipher.doFinal(src.getBytes());
        System.out.println(Hex.encodeHexString(result));
        
        //解密
        cipher.init(Cipher.DECRYPT_MODE,generateSecret);//使用同一个key
        result = cipher.doFinal(result);
        System.out.println(new String(result));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

关注微信公众号获取更多相关资源

Android小先生

相关文章

网友评论

    本文标题:Java中的加密算法(二)

    本文链接:https://www.haomeiwen.com/subject/tjulnttx.html