Laravel cookie加密

7

Laravel是否对请求和响应的Cookie进行不同的哈希处理?

我正在使用主域名和子域名,并已设置CORS和CSRF。如果我在EncryptCookies类中排除Cookie,则会在响应标头和请求标头中看到相同的Cookie。

然而,如果我将它们加密,我得到的"加密字符串"是不同的,我不知道这是否是可接受的行为?

EncryptCookies类仅列在Kernel.phpweb部分中。


可能是因为加密不等于哈希。 - online Thomas
让我们称其为“加密字符串”吧 :) - Norgul
我的意思是:加密不必每次都给出相同的“加密字符串”。例如:http://www-cs-students.stanford.edu/~tjw/jsbn/rsa2.html - online Thomas
那实际上就是我的问题...这是否应该发生? - Norgul
我还没有阅读代码,但是我认为是的,这并不奇怪。特别是如果有效载荷也可能会发生变化的话。 - online Thomas
1个回答

5

对于Laravel加密:

Laravel的加密器使用OpenSSL提供AES-256和AES-128加密。强烈建议您使用Laravel内置的加密工具,而不是尝试自己编写“自制”的加密算法。 Laravel的所有加密值都使用消息认证码(MAC)进行签名,以便在加密后无法修改其底层值。

对于每个加密,该值都使用AES-256 / AES-128进行加密,使用不同的初始化向量进行签名,即使您加密相同的值,encrypt返回的有效载荷也总是不同的。为了更好地理解,您可以查看此示例:

$value = Crypt::encrypt('foo');
// eyJpdiI6ImVoNEVlVWpnYUdwZ1JHRlJWSGlTZEE9PSIsInZhbHVlIjoiVThpWjJNWVBqZnVsWjhLVWNDXC85VHc9PSIsIm1hYyI6IjFjMDRhOTM5ZThhOWRmYjk3Mzk0OWFmNTM3YWE1NDAzNzMxNWY5YTJmODMwNmQxZDE4NDllZGJkMjc1Y2I3ZmYifQ==
base64_decode($value);
// {"iv":"eh4EeUjgaGpgRGFRVHiSdA==","value":"U8iZ2MYPjfulZ8KUcC\/9Tw==","mac":"1c04a939e8a9dfb973949af537aa54037315f9a2f8306d1d1849edbd275cb7ff"}

第二次尝试:
$value = Crypt::encrypt('foo');
// eyJpdiI6Ill5MmZleG5ycTBaZmQ5NnRDT3N3dVE9PSIsInZhbHVlIjoiTmgrRnlqajJjUk9qTk1qeHJLU21LUT09IiwibWFjIjoiNWEzZDRjZWMwMjg0ZDhlMjhlZWRiODg3ZWQ5MTcxN2I5N2JjY2ZmMzc0NTYyOTI5MThmOTk4YjAyZjM1YTRjMyJ9
base64_decode($value);
// {"iv":"Yy2fexnrq0Zfd96tCOswuQ==","value":"Nh+Fyjj2cROjNMjxrKSmKQ==","mac":"5a3d4cec0284d8e28eedb887ed91717b97bccff37456292918f998b02f35a4c3"}

如果加密后的值不同,它如何知道是否为相同的令牌? - Norgul
2
Crypt::decrypt()将对其进行解密,返回给您的值将是相同的。Crypt::decrypt(Crypt::encrypt('foo')) == Crypt::decrypt(Crypt::encrypt('foo')) - Tschallacka
与AES加密相关的链接:https://dev59.com/imox5IYBdhLWcg3wq2EC - Ben

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接