私はC#で次のコードを持っています
string s = "hellowld";
byte[] bytes = new UnicodeEncoding().GetBytes(s);
FileStream stream = new FileStream(inputFile, FileMode.Open);
RijndaelManaged managed = new RijndaelManaged();
CryptoStream stream2 = new CryptoStream(stream, managed.CreateDecryptor(bytes, bytes), CryptoStreamMode.Read);
FileStream stream3 = new FileStream(outputFile, FileMode.Create);
try
{
int num;
while ((num = stream2.ReadByte()) != -1)
{
stream3.WriteByte((byte) num);
}
[....]
このコード スニペットは、特定のファイルを復号化し、復号化されたバージョンを出力します。RijndaelManaged im の CreateDecryptor メソッドで、パスワードを KEY および IV として使用します。
ここでPHPのstackoverflowでいくつかのコードを見つけましたが、C#のようにキーと同じバイト配列をivに渡そうとしても何も起こりません。
$Pass = "hellowld";
$Clear = file_get_contents('./file.dat', FILE_USE_INCLUDE_PATH);
$bytePass=array();
$i = 0;
foreach (str_split($Pass) as $value) {
$bytePass[$i]=ord($value);
$i++;
}
echo decryptAES($Clear,$bytePass,$bytePass);
function decryptAES($content,$iv, $key,$aes) {
// Setzt den Algorithmus
switch ($aes) {
case 128:
$rijndael = 'rijndael-128';
break;
case 192:
$rijndael = 'rijndael-192';
break;
default:
$rijndael = 'rijndael-256';
}
// Setzt den Verschlüsselungsalgorithmus
// und setzt den Output Feedback (OFB) Modus
$cp = mcrypt_module_open($rijndael, '', 'ofb', '');
// Ermittelt die Anzahl der Bits, welche die Schlüssellänge des Keys festlegen
$ks = mcrypt_enc_get_key_size($cp);
// Erstellt den Schlüssel, der für die Verschlüsselung genutzt wird
$key = substr(md5($key), 0, $ks);
// Initialisiert die Verschlüsselung
mcrypt_generic_init($cp, $key, $iv);
// Entschlüsselt die Daten
$decrypted = mdecrypt_generic($cp, $content);
// Beendet die Verschlüsselung
mcrypt_generic_deinit($cp);
// Schließt das Modul
mcrypt_module_close($cp);
return trim($decrypted);
}
PHPでコードを適切に作成する方法について、本当に助けが必要です。PHP でファイルを出力する必要はありません。文字列で十分です。
UPDATE : デフォルトの C# RijndaelManaged 暗号方式は AES-128-CBC です。PHPコードをそのmcryptモジュールに変更しました(デフォルトのC#暗号メソッド)
更新 2: Java Decryptor を作成することができたので、別のことがわかりました。PHP は PKCS7 パディングを使用する必要があります。