Jaz*_*rix 1 php c# encryption laravel
在使用Crypt::Encrypt('secret')Laravel时,我需要在C#中创建相同的结果.我发现这个线程Rijndael 256在c#和php之间加密/解密?
它似乎是我需要的,但我在第三个参数,初始化矢量:(.
Laravel使用Rijndael AES加密数据.所有用户必须输入的是一个秘密密钥,在config文件夹中,它是完全随机的,长度为32个字符.
encyrption方法如下所示:
public function encrypt($value)
{
$iv = mcrypt_create_iv($this->getIvSize(), $this->getRandomizer());
$value = base64_encode($this->padAndMcrypt($value, $iv));
// Once we have the encrypted value we will go ahead base64_encode the input
// vector and create the MAC for the encrypted value so we can verify its
// authenticity. Then, we'll JSON encode the data in a "payload" array.
$mac = $this->hash($iv = base64_encode($iv), $value);
return base64_encode(json_encode(compact('iv', 'value', 'mac')));
}
Run Code Online (Sandbox Code Playgroud)
完整的Encryptor.php可以在这里找到:http://pastebin.com/yfWLPxGn
有什么想法我必须输入以获得相同的结果?:)
初始化向量是通常是随机的输入.因此,算法总是使用相同的输入,密钥和不同的IV创建不同的值.如果您想使用PHP和C#代码生成相同的结果,则需要使用相同的IV值.
Laravel encrypt()不会仅返回加密值.该值encrypt()生成base64编码的字符串,其中包含iv,mac和加密值的json编码值.
因此,您需要在C#encode()方法中应用的步骤:
base64_encode()加密值.我们将在后续步骤中使用此值.sha256算法来创建MAC(消息认证码).看看这一个value,mac和iv.像这样创建一个json字符串:
{
iv: iv value (base64 encoded),
value: encrypted value (base64 encoded),
mac: mac value created in 3rd step
}
Run Code Online (Sandbox Code Playgroud)base64编码你的这个json字符串.
| 归档时间: |
|
| 查看次数: |
1274 次 |
| 最近记录: |