前段时间项目要部署到linux上时遇到了这个问题,百度一下找到了解决方案,在这分享一下:
public class RSAEncrypt {// 密钥private static Key key;// KEY种子private static String KEY_STR = "keyString";// 常量public static final String UTF_8 = "UTF-8";public static final String AES = "AES";// 静态初始化static {try {// KEY 生成器KeyGenerator generator = KeyGenerator.getInstance(AES);// 初始化算法,设置成“SHA1PRNG”是为了防止在linux环境下随机生成算法SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");secureRandom.setSeed(KEY_STR.getBytes(UTF_8));//128,192,256generator.init(128,secureRandom);// 生成密钥key = generator.generateKey();generator = null;} catch (Exception e) {throw new RuntimeException(e);}}/*** 对源字符串加密,返回 BASE64编码后的加密字符串** @param source* 源字符串,明文* @return 密文字符串*/public static String encode(String source) {try {// 根据编码格式获取字节数组byte[] sourceBytes = source.getBytes(UTF_8);// 加密模式Cipher cipher = Cipher.getInstance(AES);cipher.init(Cipher.ENCRYPT_MODE, key);// 加密后的字节数组byte[] encryptSourceBytes = cipher.doFinal(sourceBytes);// Base64编码器BASE64Encoder base64Encoder = new BASE64Encoder();return base64Encoder.encode(encryptSourceBytes);} catch (Exception e) {// throw 也算是一种 return 路径throw new RuntimeException(e);}}/*** 对本工具类 encode() 方法加密后的字符串进行解码/解密** @param encrypted* 被加密过的字符串,即密文* @return 明文字符串*/public static String decode(String encrypted) {// Base64解码器BASE64Decoder base64Decoder = new BASE64Decoder();try {// 先进行base64解码byte[] cryptedBytes = base64Decoder.decodeBuffer(encrypted);// 解密模式Cipher cipher = Cipher.getInstance(AES);cipher.init(Cipher.DECRYPT_MODE, key);// 解码后的字节数组byte[] decryptStrBytes = cipher.doFinal(cryptedBytes);// 采用给定编码格式将字节数组变成字符串return new String(decryptStrBytes, UTF_8);} catch (Exception e) {// 这种形式确实适合处理工具类throw new RuntimeException(e);}}
以上所述是小编给大家介绍的关于AES加密算法在linux下解密失败的解决办法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!
新闻热点
疑难解答