サードパーティプロバイダーが反対側の値を復号化できるように、Java暗号化と一致するソルトとキーを使用して文字列を暗号化する必要があります。
私は暗号化の専門家ではなく、サードパーティプロバイダーとしてSALTとKEYを使用して同じ暗号化文字列を取得できないため、いくつかのStackOverflowの記事を試しました。
ここで使用されているJavaのAES暗号化と一致させるために使用するC#の暗号化タイプとモードを知る必要があります
サードパーティプロバイダーが反対側の値を復号化できるように、Java暗号化と一致するソルトとキーを使用して文字列を暗号化する必要があります。
私は暗号化の専門家ではなく、サードパーティプロバイダーとしてSALTとKEYを使用して同じ暗号化文字列を取得できないため、いくつかのStackOverflowの記事を試しました。
ここで使用されているJavaのAES暗号化と一致させるために使用するC#の暗号化タイプとモードを知る必要があります
OK - ある程度はごまかしていますが、私はそれを理解しました。サードパーティが提供するプレーンな AES 暗号化に一致する暗号化手法が見つからなかったため、サードパーティに変更するよう依頼しました。
暗号 cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
これで C# コードを修正し、最終的に統合が機能するようになりました。
public static string Encrypt2(string plainText)
{
string PassPhrase = "somepassphrase";
string SaltValue = "somesalt";
int PasswordIterations = 0; //amend to match java encryption iteration
string InitVector = "someiv";
int KeySize = 0; //amend to match java encryption key size
byte[] initVectorBytes = Encoding.ASCII.GetBytes(InitVector);
byte[] saltValueBytes = Encoding.ASCII.GetBytes(SaltValue);
byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);
Rfc2898DeriveBytes password = new Rfc2898DeriveBytes(
PassPhrase,
saltValueBytes,
PasswordIterations);
byte[] keyBytes = password.GetBytes(KeySize / 8);
RijndaelManaged symmetricKey = new RijndaelManaged();
symmetricKey.Mode = CipherMode.CBC;
ICryptoTransform encryptor = symmetricKey.CreateEncryptor(
keyBytes,
initVectorBytes);
MemoryStream memoryStream = new MemoryStream();
CryptoStream cryptoStream = new CryptoStream(memoryStream,
encryptor,
CryptoStreamMode.Write);
cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);
cryptoStream.FlushFinalBlock();
byte[] cipherTextBytes = memoryStream.ToArray();
memoryStream.Close();
cryptoStream.Close();
string cipherText = Convert.ToBase64String(cipherTextBytes);
return cipherText;
}