0
我試圖在C#中模擬Java的相同行爲。但我沒有得到期望的結果。由兩者產生的密鑰是不同的。在.net下模擬PBEWITHMD5ANDDES加密來自JAVA
Java代碼
public static String generateDecryptedKey(String secretKey, String authKey)
{
String strDecryptedKey = "";
byte[] salt = { (byte)0x09, (byte)0xD5, (byte)0xA1, (byte)0xA6, (byte)0xA3, (byte)0xA7, (byte)0xA9, (byte)0xA0 };
int iterationCount = 10;
KeySpec keySpec = new PBEKeySpec(secretKey.toCharArray(), salt, iterationCount);
SecretKey key = SecretKeyFactory.getInstance("PBEWithMD5AndDES").generateSecret(keySpec);
AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt, iterationCount);
dcipher = Cipher.getInstance(key.getAlgorithm());
dcipher.init(Cipher.DECRYPT_MODE, key, paramSpec);
byte[] enc = Base64.decodeBase64(authKey.getBytes());
byte[] utf8 = dcipher.doFinal(enc);
strDecryptedKey = new String(utf8, "UTF-8");
return strDecryptedKey;
}
C#代碼通過在相同的輸入兩者功能生成
public static string generateDecryptedKey(string secretKey,string authKey)
{
string strDecryptedKey = string.Empty;
byte[] salt = { (byte)0x09, (byte)0xD5, (byte)0xA1, (byte)0xA6, (byte)0xA3, (byte)0xA7, (byte)0xA9, (byte)0xA0 };
int iterationCount = 10;
PKCSKeyGenerator kp = new PKCSKeyGenerator();
ICryptoTransform crypt = kp.Generate(secretKey, salt, iterationCount, 1);
var bytes = Encoding.UTF8.GetBytes(authKey);
byte[] resultBytes = crypt.TransformFinalBlock(bytes, 0, bytes.Length);
strDecryptedKey = Convert.ToBase64String(resultBytes);
return strDecryptedKey;
}
結果即將錯誤。我是密碼學新手,請有人解釋我做錯了什麼。下面是BobJanova編寫的用於C#轉換的類的鏈接。
https://www.codeproject.com/Articles/16450/Emulating-PBEWithMD-AndDES-Encryption-under-NET
注:我不想透露我的鹽值,所以我改變了一些價值。希望你能理解。
謝謝@ artjom-b的回覆。很高興有人至少嘗試過。我正要失去對stackoverflow的信心。我試圖按照你的建議做同樣的事情,但輸出會有所不同。 ** JAVA:** 6a48467d40035c6056b39eb06c90938941a1a23f。 **。NET:** {q 7 t X (f J) P3* o 7ǥd߱߱ 7 – CHUHA
對不起,沒有一些示例輸入,我無法進一步幫助您。 –