第三者によって暗号化されたカードパンを受け取りました。彼らはJavaを使用して、48文字のキーを使用してパンを暗号化しました.
オンライン ツールを使用すると、彼らが見ているのと同じ結果を得ることができます。しかし、コードでは、「指定されたキーは、このアルゴリズムに対して有効なサイズではありません」というメッセージが表示されます。エラーメッセージ。
この問題を回避する方法を教えてください。
以下のコードスニペット
private void button1_Click(object sender, EventArgs e)
{
byte[] Results;
UTF8Encoding UTF8 = new UTF8Encoding();
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] TDESKey = UTF8Encoding.UTF8.GetBytes(key.Text);
TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
TDESAlgorithm.IV = new byte[TDESAlgorithm.BlockSize / 8];
TDESAlgorithm.Key = TDESKey;
TDESAlgorithm.Mode = CipherMode.ECB;
TDESAlgorithm.Padding = PaddingMode.PKCS7;
byte[] DataToDecrypt = Convert.FromBase64String(decrypt.Text);
try
{
ICryptoTransform Decryptor = TDESAlgorithm.CreateDecryptor();
Results = Decryptor.TransformFinalBlock(DataToDecrypt, 0, DataToDecrypt.Length);
}
finally
{
TDESAlgorithm.Clear();
}
decryptedText.Text = UTF8.GetString(Results);
}
以下の暗号化に使用されるコード
public static String encryptData(String toEncrypt, byte[] sharedKeyBytes){
byte[] encrypted = new byte[0];
try {
DESedeKeySpec keySpec = new DESedeKeySpec(sharedKeyBytes);
SecretKey key = SecretKeyFactory.getInstance(ALGORITHM_DESEDE).generateSecret(keySpec);
Cipher encrypter = Cipher.getInstance(TRANSFORMSATION_DESEDE_PADDED);
encrypter.init(Cipher.ENCRYPT_MODE, key);
byte[] input = toEncrypt.getBytes(UTF_8);
encrypted = encrypter.doFinal(input);
} catch (Exception e) {
throw new CryptoException("Exception caught when encrypting", e);
}
return new String(Base64.encodeBase64(encrypted));
}
これは、C# で生成する必要があるものと同等です。このコードはJavaで動作します
public static String decryptTripleDES(String toDecrypt, byte[] customerSharedKeyBytes){
byte[] decrypted = new byte[0];
System.out.println(customerSharedKeyBytes.length);
try {
byte[] decodedValue = Base64.decodeBase64(toDecrypt.getBytes(UTF_8));
DESedeKeySpec keySpec = new DESedeKeySpec(customerSharedKeyBytes);
SecretKey key = SecretKeyFactory.getInstance(ALGORITHM_DESEDE).generateSecret(keySpec);
Cipher decrypter = Cipher.getInstance(TRANSFORMSATION_DESEDE_PADDED);
decrypter.init(Cipher.DECRYPT_MODE, key);
decrypted = decrypter.doFinal(decodedValue);
} catch (Exception e) {
throw new CryptoException("Exception caught when decrypting", e);
}
return new String(decrypted);
}
この問題を回避する最善の方法についてアドバイスしてください。
ありがとう