C#とPHPの暗号化・復号化の比較

こんにちは、Buggyです。

C#のDES-CBCの暗号化・復号化をPHPに移行するシチュエーションがありまして、
個人的な備忘録として記載します。
VisualStudioに「もうこの関数は古いぜ」とか指摘されてたりしますがお構いなし(笑)

//暗号化
byte[] bstr = Encoding.Unicode.GetBytes("暗号化したい文字");
byte[] Key = Encoding.UTF8.GetBytes("暗号化キー");
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
des.Key = Key;
des.IV = Key;
ICryptoTransform transform = des.CreateEncryptor();
byte[] encrypted = transform.TransformFinalBlock(bstr, 0, bstr.Length);
transform.Dispose();
string convertedtext = System.Convert.ToBase64String(encrypted);

//上の復号化
byte[] bEnc = System.Convert.FromBase64String(convertedtext);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
des.Key = Key;
des.IV = Key;
ICryptoTransform destransform = des.CreateDecryptor();
byte[] decrypted = destransform.TransformFinalBlock(bEnc, 0, bEnc.Length);
destransform.Dispose();
string plaintext = Encoding.Unicode.GetString(decrypted);
$decryptedData = "暗号化したい文字"
$key = "暗号化キー"; // 暗号化キー(IVと同じ)

$encryptedData = openssl_encrypt(
$decryptedData,
'DES-CBC', // C#のDESCryptoServiceProviderに対応
$key,
OPENSSL_RAW_DATA,
$key // IVとしても同じ値を使用
);

// Base64エンコード
$base64EncryptedData = base64_encode($encryptedData);

echo "暗号化結果: " . $base64EncryptedData . "\n";

// Base64デコード
$encryptedData = base64_decode($base64EncryptedData );

// 復号処理
$decryptedData = openssl_decrypt(
$encryptedData,
'DES-CBC', // アルゴリズム(C#のDESCryptoServiceProviderに対応)
$key,
OPENSSL_RAW_DATA,
$key // IVとしても同じ値を使用
);

if ($decryptedData === false) {
echo "復号に失敗しました。\n";
} else {
echo "復号結果: " . $decryptedData . "\n";
}

ちなみに、PHP版はC#のソースをCopilotに貼り付けて出てきた結果そのまんまです。ググるより楽ちん!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA