ホームページ  >  記事  >  バックエンド開発  >  CryptoJS 暗号化 (iv は 32 ビット)、php 復号化

CryptoJS 暗号化 (iv は 32 ビット)、php 復号化

WBOY
WBOYオリジナル
2016-06-13 12:17:331983ブラウズ

CryptoJS は iv を 32 ビットとして暗号化し、php 復号化

<br /><script type="text/javascript" src='aes.js'></script><br />	<script type="text/javascript"><br />	    var key = '123454536f667445454d537973576562';<br />	    key = CryptoJS.enc.Hex.parse(key);<br />		var iv = CryptoJS.enc.Hex.parse("1234577290ABCDEF1264147890ACAE45");<br />		var encrypted = CryptoJS.AES.encrypt('T10515', key, {iv: iv,mode:CryptoJS.mode.CBC}).toString()<br />		alert(encrypted);<br />	</script><br />


js コードは上記のとおりです。今度は php を使用して
<br /><?php<br />$pk = "123454536f667445454d537973576562";<br />$iv = "1234577290ABCDEF1264147890ACAE45";<br />$t = ('T10515');<br /><br />$encrypted = ( mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$pk,$t,MCRYPT_MODE_CBC,$iv) );<br />echo 'base64_encode'.(base64_encode($encrypted)).'<br>';<br />?><br />

を暗号化したいのですが、なぜでしょうか。次のような警告が表示されます:
<br />Warning: mcrypt_encrypt(): Received initialization vector of size 32, but size 16 is required for this encryption mode in F:\LAMP\Apache2.4\htdocs\fee\cry.php on line 32<br />


js の CryptoJS.enc.Hex.parse が 16 進数に変換されることは知っていますが、この文字列はすでに 16 進数ではないでしょうか?
------解決策のアイデア----------------------
$pk = Pack('H* ', "123454536f667445454d537973576562");
$iv = Pack('H*', "1234577290ABCDEF1264147890ACAE45");

W/3ax9dAw/GQ/ELf5enWeQ==
T10515
W/3ax9dAw /GQ/ELf5enWeQ==
T10515

どうしてもパディングを追加しない場合: CryptoJS.pad.ZeroPadding (不足している部分は ' で埋められます)

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。