Java和js使用AESCBCPKCS5Padding(或者7)得到相同的密文

JavaScript012

Java和js使用AESCBCPKCS5Padding(或者7)得到相同的密文,第1张

首先准备一份明文和秘钥:

var plaintText = 'aaaaaaaaaaaaaaaa'// 明文

var keyStr = 'bbbbbbbbbbbbbbbb'// 一般key为一个字符串

参看官网文档,AES方法是支持AES-128、AES-192和AES-256的,加密过程中使用哪种加密方式取决于传入key的类型,否则就会按照AES-256的方式加密。

CryptoJS supports AES-128, AES-192, and AES-256. It will pick the variant by the size of the key you pass in. If you use a passphrase, then it will generate a 256-bit key.

由于Java就是按照128bit给的,但是由于是一个字符串,需要先在前端将其转为128bit的才行。

<script>

var key_hash = CryptoJS.MD5("Message")

var key = CryptoJS.enc.Utf8.parse(key_hash)

var iv = CryptoJS.enc.Utf8.parse('1234567812345678')

var encrypted = CryptoJS.AES.encrypt("Message", key, { iv: iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.ZeroPadding})

document.write("encode:"+encrypted)

</script>

php代码:

<?php

$text = "Message"

$key = md5($text) //key的长度必须16,32位,这里直接MD5一个长度为32位的key

$iv='1234567812345678'

$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $text, MCRYPT_MODE_CBC, $iv)

$decode = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $crypttext, MCRYPT_MODE_CBC, $iv)

echo base64_encode($crypttext)

echo "<br/>"

echo $decode

echo "<br/>"

?>