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