奇怪的Laravel加密EncryptString错误

时间:2018-10-20 23:32:54

标签: php laravel encryption aes encryption-symmetric

我一直在使用Laravel EncryptString函数遇到一个非常奇怪的错误,好奇是否有人知道哪里有问题。

基本上,我将使用Laravel在PHP中加密电子邮件,然后再使用Laravel和Python将其解密。 Laravel代码似乎可以正常工作,Python代码在99%的测试用例中都可以正常工作,但是只要我在要加密的电子邮件中使用自己的域名,它就会出现故障。

我的代码:

public function encryptEmail(Request $request) {
    if (!Auth::check() && !Auth::viaRemember()) {
            return redirect()->to('/login');
    }
    $this->validate($request, [
                'email' => 'bail|required|email',
    ]);
    $emailToEncrypt = $request->request->get('email');
    $encryptedEmail = Crypt::encryptString($emailToEncrypt);
    $email = Emails::where('accountId', Auth::id())->first();
    $email->val = $encryptedEmail;
    $email->save();

问题: 当我不是从运行Web服务器的我自己的域中加密电子邮件时,一切正常。

示例:

 string in form           decrypt PHP          decrypt Python
'test@gmail.com' =>     'test@gmail.com',    'test@gmail.com'
'myEmail@icloud.com' => 'myEmail@icloud.com' 'myEmail@icloud.com'
'other@hotmail.com' =>  'other@hotmail.com'  'other@hotmail.com'
'me@mydomain.com' =>    'me@mydomain.com'    'me@my'

如您所见,似乎一旦进入我的域,就好像字符串加密被切断一样,我检查了整个字符串是否都传递给了EncryptString,所以真的不确定是什么使Python代码在与我们的域有关的电子邮件中出现故障。

有人有什么想法吗?

编辑:

Python代码,其中enc是加密的Laravel数据

def decrypt(enc):
    key = base64.b64decode("MyKey=")
    dataDict = json.loads(base64.b64decode(enc))

    decrypter = AES.new(key, AES.MODE_CBC, base64.b64decode(dataDict['iv']))
    data = decrypter.decrypt(base64.b64decode(dataDict['value']))

    try:
        print(data.decode())
        return data.decode()
    except Exception as e:
        return None

0 个答案:

没有答案