Я столкнулся с действительно странной ошибкой с функцией Laravel EncryptString, любопытно, есть ли у кого-нибудь идеи, что не так.
По сути, я шифрую электронную почту в PHP с помощью Laravel, а затем расшифровываю как 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();
Эта проблема:
Все работает нормально, когда я шифрую электронную почту НЕ с моего собственного домена, на котором работает веб-сервер.
Пример:
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
Задача ещё не решена.
Других решений пока нет …