前段时间项目要部署到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,256 generator.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下解密失败的解决办法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对呐喊教程网站的支持!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#nhooo.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。