日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

java aes密钥生成_如何在Java(Android)中生成与.Net中相同的AES密钥?

發布時間:2025/3/21 Android 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java aes密钥生成_如何在Java(Android)中生成与.Net中相同的AES密钥? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我需要從.Net WebService提供的salt和密碼生成

Java(

Android)中的AES密鑰.我需要使用與.net生成的密鑰相同的密鑰和相同的密碼和鹽(使用Rfc2898DeriveBytes和AesManaged()).

這是Android中的代碼:

char[] passwordAsCharArray = password.toCharArray();

PBEKeySpec pbeKeySpec = new PBEKeySpec(passwordAsCharArray, salt, 1000, 256);

SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");

SecretKeySpec secretKey = new SecretKeySpec(factory.generateSecret(spec).getEncoded(), "AES");

這是.net中的代碼:

byte[] keyBytes = Encoding.Unicode.GetBytes(key);

Rfc2898DeriveBytes derivedKey = new Rfc2898DeriveBytes(key, keyBytes);

AesManaged rijndaelCSP = new AesManaged();

rijndaelCSP.BlockSize = 128;

rijndaelCSP.KeySize = 256;

rijndaelCSP.Key = derivedKey.GetBytes(rijndaelCSP.KeySize / 8);

rijndaelCSP.IV = derivedKey.GetBytes(rijndaelCSP.BlockSize / 8);

ICryptoTransform decryptor = rijndaelCSP.CreateDecryptor();

當我比較兩個鍵時,它們是不同的.任何想法如何在Android上生成與.Net相同的密鑰? (我知道.net中生成的密鑰是正確的).

.Net中的迭代次數為1000,salt和密碼也與Android中的相同.

好吧,事實證明我不需要完全相同的密鑰(作為字節數組).我需要這個來解密已經在.Net中加密的文件(用Java) – 用這個鍵它給我帶來Bad Padding Exception所以我認為密鑰是不同的并且導致了問題,但我需要做的就是生成IV就像一把鑰匙 – 解決了我的問題.謝謝你的回復!

最佳答案 看起來您在.NET代碼中使用“密鑰”(應該是密碼)作為salt,而Java部分使用指定的salt.此外,您指定了用于解碼salt的Unicode字符集,這很奇怪,salt應該是從頭開始的隨機八位字節字符串(== byte array).

我建議您首先將密碼和隨機鹽轉換為字節數組,使用十六進制表示(在控制臺上或在調試器中)進行比較,然后將它們用作每個中的PBKDF2函數的輸入參數.我建議您輸入UTF-8編碼作為密碼.

始終在加密中指定所有參數,盡量不要使用默認值,例如用于迭代計數.如果您的輸入由一位關閉,則輸出將完全不正確,并且無法確定哪個參數負責.

看起來Java和.NET PBKDF2“原語”在兩個平臺上是相同的,互聯網上有工作代碼.

總結

以上是生活随笔為你收集整理的java aes密钥生成_如何在Java(Android)中生成与.Net中相同的AES密钥?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。