Java中的加密算法(二)

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

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

1.对称加密算法

发送方便使用密钥对明文加密,然后接收方便使用相同的密钥对密文解密。发送方和接收方使用的密钥为同一个。是一种初等的加密算法,安全性不是特别的高。
* 常用的加密算法
* DES(数据加密标准):DES为最早期的加密算法,由美国国家标准局制定,由于密钥的长度不够,后被3DES替代
* 3DES:3DES为升级版,改进了算法和安全性
* AES: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小先生

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值