AES暗号解読を使ってwindowsで使用して問題なくLinux(Centos 6.5)で解読に失敗した解決方法

5375 ワード

インターネット上の資料によると、暗号化後、異なるシステム環境の違いによる復号化に失敗したためだ.私は自分の解決方法を話します.
暗号化するときは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);
       }
   }