我們有一個Java客戶端,發送給我們一些加密的數據 1.隨機字符串使用RSA和我們提供給他們離線的公鑰加密。 2.使用在步驟1中生成的密鑰加密它們使用數據alg_tripleDES_CBC = http://www.w3.org/2001/04/xmlenc#tripledes-cbc無法解密使用.NET中的TripleDES加密Java
我能夠解密從這樣第一步驟這是工作的關鍵...。
public static string DecryptKey(string encryptedKey)
{
X509Certificate2 cert = new X509Certificate2("c:\\test.pfx", "test");
RSACryptoServiceProvider privateKeyProvider = (RSACryptoServiceProvider)cert.PrivateKey;
string decryptedKey = System.Text.Encoding.UTF8.GetString(privateKeyProvider.Decrypt(Convert.FromBase64String(encryptedKey), false));
return decryptedKey;
}
我有這樣的代碼進行解密使用從第一步驟中生成的密鑰數據。
public static string DecryptString(string Message, string Passphrase)
{
byte[] Results;
System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();
MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(Passphrase));
TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
TDESAlgorithm.Key = TDESKey;
TDESAlgorithm.Mode = CipherMode.ECB;
TDESAlgorithm.Padding = PaddingMode.PKCS7;
byte[] DataToDecrypt = Convert.FromBase64String(Message);
try
{
ICryptoTransform Decryptor = TDESAlgorithm.CreateDecryptor();
Results = Decryptor.TransformFinalBlock(DataToDecrypt, 0, DataToDecrypt.Length);
}
finally
{
TDESAlgorithm.Clear();
HashProvider.Clear();
}
return UTF8.GetString(Results);
}
第二步失敗,出現此異常。
System.Security.Cryptography.CryptographicException: Bad Data.
at System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)
at System.Security.Cryptography.Utils._DecryptData(SafeKeyHandle hKey, Byte[] data, Int32 ib, Int32 cb, Byte[]& outputBuffer, Int32 outputOffset, PaddingMode PaddingMode, Boolean fDone)
at System.Security.Cryptography.CryptoAPITransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount)
at ConsoleApplication3.Program.DecryptString(String Message, String Passphrase) in C:\Documents and Settings\rjaladi\Desktop\ConsoleApplication3\ConsoleApplication3\Program.cs:line 66
at ConsoleApplication3.Program.Main(String[] args) in C:\Documents and Settings\rjaladi\Desktop\ConsoleApplication3\ConsoleApplication3\Program.cs:line 22
什麼是我需要檢查我們的客戶?我知道我們傳遞給TDES的參數有問題。任何幫助?
編輯:加密消息的相應Java代碼。
public String encryptText(String plainText) throws Exception{
byte[] plaintext = plainText.getBytes();
byte[] tdesKeyData = key;
byte[] myIV = initializationVector;
Cipher c3des = Cipher.getInstance(""DESede/CBC/NoPadding"");
SecretKeySpec myKey = new SecretKeySpec(tdesKeyData, "DESede");
IvParameterSpec ivspec = new IvParameterSpec(myIV);
c3des.init(Cipher.ENCRYPT_MODE, myKey, ivspec);
byte[] cipherText = c3des.doFinal(plaintext);
sun.misc.BASE64Encoder obj64=new sun.misc.BASE64Encoder();
return obj64.encode(cipherText);
}
它在TransformFinalBlock上失敗,提示您的數據長度錯誤。 – 2011-12-19 19:56:18
'ECB' =>'OMG'。 – CodesInChaos 2011-12-19 19:56:38
你做了什麼來調試參數,你是否證實它們是相同的值,基於它拋出異常的事實,我會說你什麼也沒做。 – 2011-12-19 20:01:17