For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
昆明达内培训的小编这一期给大家讲关于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 = ull;
} 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);
}
}
了解详情请登陆昆明达内IT培训官网(km.tedu.cn)!