function decrypt($encryptedData, $key,$iv) { $decryptedData = openssl_decrypt( base64_decode($encryptedData), 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv ); if ($decryptedData === false) { echo 'failed'; } return $decryptedData; }
vuejs方法
export function encryptionValue(value, key = 'E7D9B13077291073041EE0AD54EAD975', iv = '0000000000000000') { value = value.toString() key = CryptoJS.enc.Utf8.parse(key) iv = CryptoJS.enc.Utf8.parse(iv) const encrypted = CryptoJS.AES.encrypt(value, key, { iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); return encrypted.toString()}
根据提供的代码,问题可能出现在以下几个方面:
value
被转换为字符串,但在Lumen方法中,没有显式地进行这个操作。请确保在两个地方都使用了相同的字符编码。综上所述,以下是VueJS和Lumen的修正代码:
VueJS方法:
export function encryptionValue(value, key = 'E7D9B13077291073041EE0AD54EAD975', iv = '0000000000000000') { const keyHex = CryptoJS.enc.Utf8.parse(key); const ivHex = CryptoJS.enc.Utf8.parse(iv); const encrypted = CryptoJS.AES.encrypt(value, keyHex, { iv: ivHex, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); return encrypted.toString();}
Lumen方法:
function decrypt($encryptedData, $key, $iv) { $decryptedData = openssl_decrypt( base64_decode($encryptedData), 'aes-128-cbc', // 注意这里使用的是 'aes-128-cbc' 而不是 'AES-128-CBC' $key, OPENSSL_RAW_DATA, $iv ); if ($decryptedData === false) { // 这里可以进一步处理错误,例如输出错误信息或者抛出异常等。 echo 'failed'; } else { return $decryptedData; }}
请注意,这些修改只是基于提供的代码进行的推测。如果仍然存在问题,可能需要进一步检查代码的其他部分,或者考虑使用专门的工具或库来进行加密和解密操作,以确保兼容性和安全性。
在我的jsfiddle中查看我失败的尝试或在这里查看: 知道为什么解密失败了吗?
因此,这种特殊的异常非常常见,但我的问题与通常被问到的略有不同。 我有一个AES解密和加密函数,定义如下: 现在,如果我像这样执行单个解密: 字节数组输出很好。而如果我执行双重加密/解密: 我得到了著名的<code>javax.crypto。BadPaddingException:给定的最终块未正确填充异常。请注意,和只是整数(假设它们都是0)。目前,IVBytes只是一个大小为16的空字节数组,
我使用JavaAPI生成128bit密钥。下面是我使用的算法: 我可以通过这些方法轻松地使用secretKey加密和解密消息。由于Java默认使用128bit AES加密,因此它使用SHA1生成原始密钥的哈希,并将哈希的前16字节用作AES中的密钥。然后以十六进制格式转储IV和密文。 但是,它返回一个空字符串。
我之所以问这个问题,是因为两天来我读了很多关于crypto AES加密的帖子,就在我以为我得到了它的时候,我意识到我根本没有得到它。 这个帖子是最接近我的问题,我有完全相同的问题,但它没有得到回答: CryptoJS AES加密与JAVA AES解密值不匹配 我得到的是已经加密的字符串(我得到的代码只是为了看看他们是怎么做的),所以修改加密方式不是一个选项。这就是为什么所有类似的问题对我来说都不是
注意:这只是为个人使用和学习,我不是试图滚动我自己的加密为公众使用。 我需要AES256加密一个字符串,但是我当前的尝试在十六进制解码时最终得到了一个类似server side的字符串。当十六进制解码时,它应该是一个有效的utf8 base64字符串,然后可以将其解码为原始字符串。这与这里提供的解决方案类似,但是salt并不是实际问题(尽管答案被接受),并且我无法在使用之前通过十六进制解码iv来抑
我有一些问题,解密文本的CryptoJS已经用Java加密。解密应使用AES/CBC/PKCS5Padding完成。加密的字符串是base64编码的,我在尝试解密字符串之前对其进行解码。 这就是Java代码的样子: