文字列値の暗号化と復号化を実行できる暗号化クラスを持つC#アプリケーションがあるプロジェクトに取り組んでいます。ここで、PHPを使用してC#アプリケーションと一緒に機能するWebインターフェイスを作成したいと思います。
C#プロジェクトがPHP Webサイトで実行しているのと同じ種類の暗号化を実行しようとしていますが、実行する必要があることを理解できません。
以下は私のC#アプリケーションのコードです。
public static string encrypt(string encryptionString)
{
byte[] clearTextBytes = Encoding.UTF8.GetBytes(encryptionString);
SymmetricAlgorithm rijn = SymmetricAlgorithm.Create();
MemoryStream ms = new MemoryStream();
byte[] rgbIV = Encoding.ASCII.GetBytes("PRIVATE");
byte[] key = Encoding.ASCII.GetBytes("PRIVATE");
CryptoStream cs = new CryptoStream(ms, rijn.CreateEncryptor(key, rgbIV), CryptoStreamMode.Write);
cs.Write(clearTextBytes, 0, clearTextBytes.Length);
cs.Close();
return Convert.ToBase64String(ms.ToArray());
}
PHPWebインターフェイスで次のコードを試しています
define("CIPHERKEY", "PRIVATE");
function encrypt($data)
{
//$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_ECB, '');
$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');
//$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($cipher), MCRYPT_RAND);
$iv = 'PRIVATE';
//$key = substr(CIPHERKEY, 0, mcrypt_enc_get_key_size($cipher));
$key =CIPHERKEY;
if (mcrypt_generic_init($cipher, $key, $iv) != 1)
{
$cipherData = mcrypt_generic($cipher, $data);
mcrypt_generic_deinit($cipher);
mcrypt_module_close($cipher);
$sanitizedCipherData = trim(base64_encode($cipherData));
return $sanitizedCipherData;
}
}
さまざまなバリエーションを試しましたが、正しい方法が見つかりません。
iv変数はC#アプリ内のrgbIV変数と同じキーを使用しており、PHP WebインターフェイスのCIPHERKEYは私のc#アプリ内のキー変数と同じキーを使用しています。
あなたが提供できるどんな助けにも感謝します
更新
現時点では、さまざまな結果が得られ続けています。文字列を渡してテストしていますpassword
。
上記のPHPの現在のコードではNHHloywxlybbANIH5dS7SQ==
、暗号化された文字列として取得します。
ただし、同じ文字列を使用すると、次の結果が得られます。n86Mwc5MRXzhT3v3A/uxEA==