我尝试解密在Java后端加密的消息。
为此,我准备了这个小提琴: http://jsfiddle.net/Lwp15e8z/1/
var secretKeyHash = CryptoJS.SHA256('mySecret')
var bytes =
CryptoJS.AES.decrypt(
CryptoJS.enc.Base64.parse(
"mB7DRFjMdC1cG+twH3jKDiWcPGWypqwHlFqf1vOJpC8="),
secretKeyHash,
{
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
})
console.log("Result: ", bytes.toString(CryptoJS.enc.Utf8))
不知何故,我得到了一个空的bytes
WordArray而不是解密的文本。
有什么想法我在做什么错吗?
参数为:
后端代码的工作方式如下:
import shadow.com.google.common.hash.Hashing
import shadow.com.google.common.io.BaseEncoding
import javax.crypto.Cipher
import javax.crypto.spec.SecretKeySpec
fun aes256Encrypt(block: ByteArray, key: ByteArray): ByteArray {
val secretKey = SecretKeySpec(
Hashing.sha256().hashBytes(key).asBytes(), "AES")
val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding")
cipher.init(Cipher.ENCRYPT_MODE, secretKey)
return cipher.doFinal(block)
}
fun main(args: Array<String>) {
println(BaseEncoding.base64().encode(
aes256Encrypt("Hello World ".toByteArray(), "mySecret".toByteArray())))
}
我已经从cryptojs文档中进行了观察:https://cryptojs.gitbook.io/docs/#ciphers
CryptoJS.SHA256
,所以我将传递一个WordArray。这是否意味着我需要自己解析IV?