laravel cookie加密解密原理

通过控制台的 cookie 信息我们会发现,每次请求之后,关键的 cookie,如PHPSESSID、XSRF-TOKEN 都会发生变化,并且都是很长的一串字符串。

其实这是一个 json 数组,其中包含了 iv,value,mac 三个字段:

这些字段都是在框架加密解密的时候使用的,加密方法是 openssl_encrypt

对 openssl 不太了解的可以看下下面的例子:

$data = ‘laravel‘;
$iv = random_bytes(16);
$key = ‘this is key‘;

$encrypt = openssl_encrypt($data, ‘AES-256-CBC‘, $key, 0, $iv);

var_dump($encrypt);
var_dump(openssl_decrypt($encrypt, ‘AES-256-CBC‘, $key, 0, $iv));

laravel 中的话,key 就是 .env 配置文件里面的 APP_KEY,除了 key 还有两个变化的参数就是 加密、解密的数据以及 iv。

也就是说,如果我们需要加密 cookie 的话,我们至少得保存下 加密后的数据以及 iv。

这样看来,mac 字段似乎有点多余,但是我们可以使用该字段来验证数据的合法性:

如果验证不通过, laravel 也就不会对 data 进行解密操作。

虽然每次请求 cookie 都会发生变化,但是实际数据是没有变的,发生变化只是因为用来加密的 iv 变了(使用 random_bytes 方法生成)。

由于 iv 每次都变化,所以需要把 iv 也一同返回给浏览器,加上验证数据合法性的 mac,最后返回的就是下面的数组的 json编码后在 base64 编码的数据:

[
   ‘iv‘ => random_bytes(16), // 16位随机字节串
   ‘value‘ => ‘xxxx...‘,    // 加密后的数据
   ‘mac‘ => ‘xxx...‘   // 后续请求验证数据合法性的字符串
]

  

原文地址:https://www.cnblogs.com/eleven24/p/8269988.html

时间: 2024-10-13 00:16:25

laravel cookie加密解密原理的相关文章

Openssl加密解密原理与命令使用--尚未完善

Openssl加密解密原理: 示例: 比如A与B通信发送数据: 加密原理: 在A把要发送的内容通过单向加密方式进行数据指纹计算,计算出数据指纹后,会用自己的私钥加密数据指纹,并把加密的数据指纹添加到原数据的后面.然后对整个数据(原数据+数据指纹)进行对称加密算法进行计算(让明文转换成密文),得出的数据为整个数据的密码,再用B的公钥进行这个密码进行加密,并放到这个数据的后面一并发给B. 解密原理: 1.B用自己的私钥能够解密---------至此说明数据保密的. 2.B用私钥解密出来的密码,去解密

Base64加密解密原理以及代码实现(VC++)

Base64加密解密原理以及代码实现 转自:http://blog.csdn.net/jacky_dai/article/details/4698461 1. Base64使用A--Z,a--z,0--9,+,/ 这64个字符.    2. 编码原理:将3个字节转换成4个字节( (3 X 8) = 24 = (4 X 6) )先读入3个字节,每读一个字节,左移8位,再右移四次,每次6位,这样就有4个字节了.    3. 解码原理:将4个字节转换成3个字节.先读入4个6位(用或运算),每次左移6位

Linux运维之加密/解密原理、自建CA及搭建基于https的Apache

上几次博文我们具体讨论了Apache(httpd)的基础知识: HTTP协议基础(参见博文:http://sweetpotato.blog.51cto.com/533893/1656137) Apache2.2的基本配置(参见博文:http://sweetpotato.blog.51cto.com/533893/1657668) Apache2.2的虚拟主机(参见博文:http://sweetpotato.blog.51cto.com/533893/1660229) 本次博文我们具体讨论下加密/

Laravel之加密解密/日志/异常处理及自定义错误

一.加密解密 1.加密Crypt::encrypt($request->secret) 2.解密try { $decrypted = Crypt::decrypt($encryptedValue);} catch (DecryptException $e) { //} 二.日志 1.配置文件config/app.php 中的debug 配置选项控制浏览器显示的错误详情数量.默认情况下,该配置选项被设置在.env 文件中的环境变量APP_DEBUG .对本地开发而言,你应该设置环境变量APP_DE

Base64加密解密原理以及代码实现

1. Base64使用A--Z,a--z,0--9,+,/ 这64个字符.    2. 编码原理:将3个字节转换成4个字节( (3 X 8) = 24 = (4 X 6) )先读入3个字节,每读一个字节,左移8位,再右移四次,每次6位,这样就有4个字节了.    3. 解码原理:将4个字节转换成3个字节.先读入4个6位(用或运算),每次左移6位,再右移3次,每次8位.这样就还原了. Base64是一种非经常见的编码规范,其作用是将二进制序列转换为人类可读的ASCII字符序列,经常使用在需用通过文

加密解密原理,自建CA

目前数据的加密方式有3种:单向加密,对称加密,公钥加密(非对称加密),我们常见的加密算法有DES,MD5,SHA1...SHA512,RSA,都有各自不同的用处.简单介绍下这3中加密方式. 单向加密 通过某种Hash 函数对原始数据进行提取,提取得到一端固定长度的密文(不管文件有多大,密文长度不变),这段数据也常被称为数据指纹或特征码. 特点:1)单向加密,只能由原始数据得到特征码,而不能由特征码逆向推出原始数据. 2)雪崩效应,原始数据微小的改变会导致特征码巨大的变化 应用:常被应用于数字签名

加密解密原理和基于Openssl构建自有CA

一.加密解密过程描述: 互联网数据传输需要实现:数据隐秘性,数据完整性,身份认证和密钥交换: 例如:Alice向Bob传输数据: 数据加密过程: 1.Alice生成原数据,用单向加密算法计算出原数据的特征码: 2.用自己的私钥加密原数据特征码并附加在原数据的后面: 3.用对称加密算法为整个数据加密生成对称加密密匙: 4.用Bob提供的公钥加密对称加密密匙,并附加在加密的数据后面一并发送给Bob. 数据解密过程: 1.Bob接收到数据,用自己的私钥解密对称加密密匙:确定数据接收方Bob的身份: 2

Windows系统EFS加密/解密原理介绍

EFS加密是windows系统自带的加密方式,一个系统用户对文件加密后,只有以该用户的身份登陆才能读取该文件.EFS加密的文件和文件夹名字颜色是绿色,或者在该文件或文件夹的高级属性是加密属性.这样做在很大程度尚提高了数据的安全性,但是如果秘钥文件丢失或者重装系统就会导致加过密的文件不能打开,今天的教程主要介绍的就是如果电脑使用ESF加密后却因为其他原因导致无法打开文件,我们应该怎么解密. EFS加密原理介绍 要想解密,我们首先要了解是怎么加的密,下面介绍EFS加密原理. 当我们使用EFS对一个N

itsdangerous的加密解密原理(易懂版)

1 from itsdangerous import TimedJSONWebSignatureSerializer 2 import time 3 from itsdangerous import SignatureExpired # 导入异常报错模块 4 5 yan = "hdwqidbquwddwhdwihdwq" # 加盐 可以自定义也可以使用Django配置自带的 6 7 Serializer = TimedJSONWebSignatureSerializer(yan, 5)