О шифровании RSA + AES (как расшифровать AES в PHP) - PullRequest
0 голосов
/ 06 февраля 2019

Сегодня я попытался зашифровать и передать введенный пользователем пароль с помощью метода RSA + AES.Я уже завершил подготовку интерфейсного JS (код выглядит следующим образом, и результат операции тот же, AES, значение шифрования RSA будет изменено), он использует две библиотеки, jsencrypt и crypto-js сейчас пишут PHP для расшифровки бэкэнда (код выглядит следующим образом), но я столкнулся с некоторыми трудностями в этом процессе.Часть расшифровки RSA была написана и протестирована правильно, но я не знаю, как написать часть расшифровки AES.Несмотря на то, что я ознакомился со многими материалами, их примеры отличаются от меня.Я не знаю, как его использовать (я приложу несколько примеров в конце статьи).
проблема:
1. Является ли моя часть шифрования JS правильной и логичной?
2, как мне написать часть расшифровки PHP AES;
3. Верна ли моя идея? :
Клиент (JavaScript):
Исходный пароль пользователя для шифрования AES
RSA publicключ шифрования ключ AES
--- передача данных ---
сервер (PHP):
расшифровка секретного ключа RSA Получить ключ AES
расшифровка AES получить исходный пароль пользователя
получить зашифрованный пользовательпароль, зашифровав исходный пароль пользователя и сохранив его в базе данных.
Мой код JavaScript:

$(function () {
            //Encrypted part
            //AES
            var password_form="QAQ";
            console.log(password_form);
            var password = CryptoJS.AES.encrypt(password_form,'Lime Website').toString();
            console.log(password);
            //RSA
            var public_key = $("#inputPublic_key").val();
            console.log(public_key);
            var private_key = $("#inputPrivate_key").val();
            console.log(private_key);
            var encrypt = new JSEncrypt();
            encrypt.setPublicKey(public_key);
            var AES_key = encrypt.encrypt(password);
            console.log(AES_key);
        });

        //Decryption part (actually should be done by the server, here for convenience)
        //RSA
        var decrypt = new JSEncrypt();
        decrypt.setPrivateKey(private_key);
        var AES_key_decrypt = decrypt.decrypt(AES_key);
        console.log(AES_key_decrypt);
        //AES
        var bytes = CryptoJS.AES.decrypt(AES_key_decrypt,'Lime Website');
        var password_decrypt = bytes.toString(CryptoJS.enc.Utf8);
        console.log(password_decrypt);

Мой код PHP:

<?php
$private_key = '-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDlOJu6TyygqxfWT7eLtGDwajtNFOb9I5XRb6khyfD1Yt3YiCgQ
WMNW649887VGJiGr/L5i2osbl8C9+WJTeucF+S76xFxdU6jE0NQ+Z+zEdhUTooNR
aY5nZiu5PgDB0ED/ZKBUSLKL7eibMxZtMlUDHjm4gwQco1KRMDSmXSMkDwIDAQAB
AoGAfY9LpnuWK5Bs50UVep5c93SJdUi82u7yMx4iHFMc/Z2hfenfYEzu+57fI4fv
xTQ//5DbzRR/XKb8ulNv6+CHyPF31xk7YOBfkGI8qjLoq06V+FyBfDSwL8KbLyeH
m7KUZnLNQbk8yGLzB3iYKkRHlmUanQGaNMIJziWOkN+N9dECQQD0ONYRNZeuM8zd
8XJTSdcIX4a3gy3GGCJxOzv16XHxD03GW6UNLmfPwenKu+cdrQeaqEixrCejXdAF
z/7+BSMpAkEA8EaSOeP5Xr3ZrbiKzi6TGMwHMvC7HdJxaBJbVRfApFrE0/mPwmP5
rN7QwjrMY+0+AbXcm8mRQyQ1+IGEembsdwJBAN6az8Rv7QnD/YBvi52POIlRSSIM
V7SwWvSK4WSMnGb1ZBbhgdg57DXaspcwHsFV7hByQ5BvMtIduHcT14ECfcECQATe
aTgjFnqE/lQ22Rk0eGaYO80cc643BXVGafNfd9fcvwBMnk0iGX0XRsOozVt5Azil
psLBYuApa66NcVHJpCECQQDTjI2AQhFc1yRnCU/YgDnSpJVm1nASoRUnU8Jfm3Oz
uku7JUXcVpt08DFSceCEX9unCuMcT72rAQlLpdZir876
-----END RSA PRIVATE KEY-----';
$private_key_public_key_availability = openssl_pkey_get_private($private_key);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id
$AES_key = "iOks+yhKxQBiqtd5rHQRNdXOGqixhNzquuZuPZ5dDsYfh1nDTLiygukiyexNBqHfmA7zis1nRTZW2Nw4bN5Pr2yCgvh1GPV6K5WigO5jD1+ztuyp1hV5ymNSws6EUPPjW9cwrOpO7EIeiYjvGo7ziyPwsCU0vwtQAkNAFY3uhB0=";
$AES_key_decrypted = ""; 
echo "After decrypting the data:";
openssl_private_decrypt(base64_decode($AES_key),$AES_key_decrypted,$private_key_public_key_availability);
echo $AES_key_decrypted;

Снимок экрана одного из результатов выполнения JavaScript:
Снимок экрана
Некоторые примеры:
https://odan.github.io/2017/08/10/aes-256-encryption-and-decryption-in-php-and-csharp.html AES - Crypto JS & PHP Java-шифрование AES, PHP-дешифрование AES
Наконец, извините за мой плохой английский.
...