ivを0に設定するために最初は0埋めしたバイナリ文字列を指定しようと考え、以下の二つの設定方法を考えました。
php
1$iv1 = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
と
php
1$iv2 = pack("nvc*", 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
です。
それぞれのivを利用して出来た暗号文は同じものです。
php
1<?php 2 3$text = "秘密の言葉"; 4$key = "秘密の鍵"; 5 6$iv1 = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; 7$iv2 = pack("nvc*", 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); 8 9$enc = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $text, MCRYPT_MODE_CBC, $iv1); 10echo base64_encode($enc); 11 12echo base64_encode($iv1)." ".base64_encode($iv2); 13// output どちらのivを使っても出力は変わらない 14// pUNFp+g0wKGhHpJtFy8G4w==
ですが調べてみると二つのivの値(バイナリ)は厳密には違うようです。
php
1echo base64_encode($iv1)."\n".base64_encode($iv2); 2// output 3// AAAAAAAAAAAAAAAAAAAAAA== 4// AAAAAAAAAAAAAAAAAAAAAAAA
この二つの出力が違うのはなぜでしょうか?
また、二つが違う値であれば生成される暗号文が同じになるのはなぜでしょうか?
ご存知の方がいれば教えていただけると幸いです。
PHPのバージョン:5.4.45
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/16 11:27