Laravel8对称加密的规则是什么?

相关环境:PHP7.4 + Laravel8.38

需求:我现在需要写个接口给第三方使用,第三方是java语言,我打算使用对称加密AES,把加密的sign给到我就行。
使用laravel8进行AES加解密代码:

use Illuminate\Support\Facades\Crypt;

$encrypted = Crypt::encryptString('Hello world.');

$decrypted = Crypt::decryptString($encrypted);

使用上面代码,现在我想问的是,aes加密除了key还有AES-256-CBC这2个条件,那些填充方式,偏移量,输出,字符集
这些又是什么?毕竟我要告诉第三方加密规则的。

Laravel8对称加密的规则是什么?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案

我以为你们前面讨论了半天,讨论明白了,合着看了半天还是白讨论了,先看源码 file

纠结 $iv = random_bytes(openssl_cipher_iv_length(strtolower($this->cipher))) 做什么?这里只是根据提供的 cipher 创建了对应长度的一个随机的 key,random_bytes 里面接受一个长度参数,创建一个指定长度的二进制字节串。

后面加密的时候传给 openssl, key 来自于 config('app.key') ,cipher 也 来自于 config('app.cipher'),加密方式和密钥这不就有了。

后面加密完成后,解密可能会用到的信息都给拿出来了(除了密钥), iv、原文、mac、tag,value(密文)。

换句话说,这个方法返回的 base64 编码后的内容不是密文,而是要把这个 base64 decode 后,拿到一个 JSON,这个 JSON 里面的 value 字段才是实际的密文。

现在 IV(base64 过)、密文、密钥,都有了,直接丢进去解密不就完事儿了吗。

random_bytes 的结果看起来怪怪的是吧?

file

为什么我们平常的 iv 是个字符串,这里确实不认识的东西?而不是平时的hex字符串?因为这是一个 byte 串,实际上 Java 那些拿到后也会转成一个 byte 数组。

iv 这个本来就应该每次都是随机的,如果你觉得那个看起来奇怪,你可以把他用 bin2hex 转一下,这也看起来就是 hex 了。

再不济,看看 decrypt 方法的实现也可以呐。

2年前 评论
bluememory (楼主) 2年前
讨论数量: 4

www.php.net/manual/zh/function.ope... 看php文档中文注释不行么

2年前 评论
bluememory (楼主) 2年前

我以为你们前面讨论了半天,讨论明白了,合着看了半天还是白讨论了,先看源码 file

纠结 $iv = random_bytes(openssl_cipher_iv_length(strtolower($this->cipher))) 做什么?这里只是根据提供的 cipher 创建了对应长度的一个随机的 key,random_bytes 里面接受一个长度参数,创建一个指定长度的二进制字节串。

后面加密的时候传给 openssl, key 来自于 config('app.key') ,cipher 也 来自于 config('app.cipher'),加密方式和密钥这不就有了。

后面加密完成后,解密可能会用到的信息都给拿出来了(除了密钥), iv、原文、mac、tag,value(密文)。

换句话说,这个方法返回的 base64 编码后的内容不是密文,而是要把这个 base64 decode 后,拿到一个 JSON,这个 JSON 里面的 value 字段才是实际的密文。

现在 IV(base64 过)、密文、密钥,都有了,直接丢进去解密不就完事儿了吗。

random_bytes 的结果看起来怪怪的是吧?

file

为什么我们平常的 iv 是个字符串,这里确实不认识的东西?而不是平时的hex字符串?因为这是一个 byte 串,实际上 Java 那些拿到后也会转成一个 byte 数组。

iv 这个本来就应该每次都是随机的,如果你觉得那个看起来奇怪,你可以把他用 bin2hex 转一下,这也看起来就是 hex 了。

再不济,看看 decrypt 方法的实现也可以呐。

2年前 评论
bluememory (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!