一聚教程网:一个值得你收藏的教程网站

热门教程

关于AES加密算法在linux下解密失败的解决办法

时间:2022-06-30 16:10:12 编辑:袖梨 来源:一聚教程网

前段时间项目要部署到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);

}

}

 

热门栏目