我一直在使用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