AES暗号解読を使ってwindowsで使用して問題なくLinux(Centos 6.5)で解読に失敗した解決方法
5375 ワード
インターネット上の資料によると、暗号化後、異なるシステム環境の違いによる復号化に失敗したためだ.私は自分の解決方法を話します.
暗号化するときはBASE 64 Encoderでパッケージングしたほうがいいです(パッケージングしないと暗号化された文字が意味不明に捨てられます).もちろんこれは本人の解決策です(実験で利用可能).以下に暗号化と復号化のコードを載せます:参考までに、赤い部分に重点を置きます.
暗号化するときはBASE 64 Encoderでパッケージングしたほうがいいです(パッケージングしないと暗号化された文字が意味不明に捨てられます).もちろんこれは本人の解決策です(実験で利用可能).以下に暗号化と復号化のコードを載せます:参考までに、赤い部分に重点を置きます.
/**
* key src
* @param key
* @param src
* @return
* @throws Exception
*/
public static String encrypt(String key,byte[] src)throws Exception {
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(key.getBytes("UTF-8"));
kgen.init(128,secureRandom);
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKey skey=new SecretKeySpec(enCodeFormat,"AES");
Cipher cipher=Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE,skey);
BASE64Encoder encoder = new BASE64Encoder(); //
return encoder.encode(cipher.doFinal(src));
}catch (Exception e) {
throw new RuntimeException(" !",e);
}
}
/*
* key src
*/
public static byte[] decrypt(String key,String s)throws Exception{
try {
BASE64Decoder decoder = new BASE64Decoder();
byte[] src = decoder.decodeBuffer(s);
KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(key.getBytes("UTF-8"));
kgen.init(128,secureRandom);
SecretKey secretKey = kgen.generateKey();
byte[] deCodeFormat = secretKey.getEncoded();
SecretKey secretkey=new SecretKeySpec(deCodeFormat,"AES");
Cipher cipher=Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE,secretkey);
return cipher.doFinal(src);
}catch (Exception e) {
throw new Exception(" !",e);
}
}