は3DES(DESEDE) - C#で(JAVAで行う)暗号化されたテキストを復号化暗号化されたテキストは、(私たちはまったくJAVAのバックグラウンドを持っていない)JAVAで行われ
解読がある、ここでC#であること、そしてだろうコード暗号化されたJavaコードは、しかし、解読しようとしたとき、エラーメッセージ
public String encryptData(String privateKey, String rawData)
{
Cipher cipher = null;
try
{
cipher = Cipher.getInstance(DESEDE_ENCRYPTION_SCHEME);
cipher.init(Cipher.ENCRYPT_MODE, getSecretKey(privateKey));
byte[] plainText = rawData.getBytes(UNICODE_FORMAT);
byte[] encryptedText = cipher.doFinal(plainText);
return new String(Base64.encodeBase64(encryptedText));
}
}
なっている
public static string DecryptString(string Message, string Passphrase)
{
byte[] Results;
UTF8Encoding UTF8 = new UTF8Encoding();
MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(Passphrase));
// byte[] TDESKey = UTF8.GetBytes(Passphrase);
TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
TDESAlgorithm.Key = TDESKey;
// TDESAlgorithm.Mode = CipherMode.CTS;
TDESAlgorithm.Padding = PaddingMode.Zeros;
byte[] DataToDecrypt = Convert.FromBase64String(Message);
try
{
ICryptoTransform Decryptor = TDESAlgorithm.CreateDecryptor();
Results = Decryptor.TransformFinalBlock(DataToDecrypt, 0, DataToDecrypt.Length);
}
finally
{
TDESAlgorithm.Clear();
HashProvider.Clear();
}
return Encoding.UTF8.GetString(Results);
}
:BAD DATA
をここで私はどこに行方不明ですか?
AFAIK、 'DESEDE_ENCRYPTION_SCHEME'は3DESインスタンスを' ECB'モードで返しますが、.NETの 'TripleDESCryptoServiceProvider()'はデフォルトで 'CBC'モードを返します。 'TDESAlgorithm.Mode = CipherMode.ECB'を設定してください –
' DESEDE_ENCRYPTION_SCHEME'はどのように定義されていますか?その他の問題:a)Oracle JCEプロバイダは、「PaddingMode.Zeros」をサポートしていません。 BouncyCastleを使用する必要があります。 b)あなたはJavaでMD5キーの派生をしていません。また、MD5を1回呼び出すだけでキーを派生させないでください。パスワードをお持ちの場合は、PBKDF2やArgon2などの適切なスキームを使用する必要があります。 –