Java AES加密,在Window和Linux下加密结果不一致,求大神指点

Leech 发布于 2016/05/31 17:29
阅读 702
收藏 0
public class SecurityUtils {

    /**
     * 系统默认的16位字节秘钥
     *
     */
    public static final String SECRET_KEY_16 = "IJgJaTxW006YoC2s";
    
    /**
     * AES键长度
     *
     */
    public static final Integer AES_KEY_LENGTH = 16;
    
    /**
     * 获取指定长度的随机秘钥
     *
     * @param length
     *            随机秘钥长度
     * @return 指定长度的随机秘钥
     */
    public static String getSecretKey(int length) {
        return RandomStringUtils.random(length, true, true);
    }
    
    /**
     * AES对称加密
     *
     * @param plainText
     *            原文
     * @param secretKey
     *            16个字节长度的秘钥
     * @return 密文
     */
    public static String encryptionAES(String plainText, String secretKey) {
        try {
            KeyGenerator kgen = KeyGenerator.getInstance("AES");
            //防止linux下 随机生成key
            SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");   
            secureRandom.setSeed(secretKey.getBytes());   
            kgen.init(128, secureRandom);
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            IvParameterSpec iv = new IvParameterSpec("0102030405060708".getBytes());
            cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(kgen.generateKey().getEncoded(), "AES"), iv);
            byte[] bytes = cipher.doFinal(plainText.getBytes());
            return Base64Utils.encodeToString(bytes).replaceAll("\r\n", "").replaceAll("\r", "").replaceAll("\n", "");
        } catch (NoSuchAlgorithmException | NoSuchPaddingException
                | InvalidKeyException | IllegalBlockSizeException
                | BadPaddingException | InvalidAlgorithmParameterException e) {
            throw new SystemException("加密失败!", e);
        }
    }
    
    /**
     * AES对称解密
     *
     * @param cipherText
     *            密文
     * @param secretKey
     *            16个字节长度的秘钥
     * @return 明文
     */
    public static String decryptionAES(String cipherText, String secretKey) {
        try {
            KeyGenerator kgen = KeyGenerator.getInstance("AES");
            //防止linux下 随机生成key
            SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");   
            secureRandom.setSeed(secretKey.getBytes());   
            kgen.init(128, secureRandom);
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            IvParameterSpec iv = new IvParameterSpec("0102030405060708".getBytes());
            cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(kgen.generateKey().getEncoded(), "AES"), iv);
            byte[] bytes = cipherText.getBytes();
            return new String(cipher.doFinal(Base64Utils.decode(bytes)));
        } catch (NoSuchAlgorithmException | NoSuchPaddingException
                | InvalidKeyException | IllegalBlockSizeException
                | BadPaddingException | InvalidAlgorithmParameterException e) {
            throw new SystemException("解密失败!", e);
        }
    }
    
    public static void main(String[] args) {
        System.out.println(encryptionAES("123456", "HobmkZZzs6SWSFYY"));
    }
    
}

以下是问题补充:

@Leech:Linux算出的密码是随机的 (2016/05/31 17:43)
加载中
返回顶部
顶部