AES在linux加密String,關於AES加密算法在linux下解密失敗的解決

前段時間項目要部署到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);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值