Теперь на веб-странице изменился способ входа в систему. Теперь перед отправкой пароль шифруется с помощью Javascript. Итак, чтобы мой PHP-скрипт снова заработал, мне нужно сделать то же самое, потому что пароль больше не отправляется в виде обычного текста.
После нажатия кнопки «Отправить» на веб-странице, выполняется следующий Java-скрипт:
Код: Выделить всё
async function SubmitForm() {
if ($("#User").val() && $("#Pass").val() && publicKey) {
var encrypted = await encrypt($("#Pass").val(), publicKey);
$("#Pass").val(encrypted);
}
$("form:first").submit();
}
const publicKey = `-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCt3zMwB37NjgGw7KxHrqkF5bxc
QtgisoTXre7ca0+ChWOt9/Sj2RombqqDFFnJUweObw7/dPdmBWUb8MKMcVKYEl5X
PEZaIyCZ88XTe2tSGEZXpMW0R05TrfRmVQEzWH1rVEQIIjIfrxD+fRai8b4fpVBi
UYRD3EV6FYVmK+u0sQIDAQAB
-----END PUBLIC KEY-----
`.trim();
Код: Выделить всё
async function encrypt(plaintext, publicKey) {
const pub = await importPublicKey(publicKey);
const encrypted = await encryptRSA(
pub,
new TextEncoder().encode(plaintext)
);
const encryptedBase64 = window.btoa(ab2str(encrypted));
return encryptedBase64;
и его обратные вызовы к следующим функциям:
Код: Выделить всё
function getSpkiDer(spkiPem) {
const pemHeader = "-----BEGIN PUBLIC KEY-----";
const pemFooter = "-----END PUBLIC KEY-----";
var pemContents = spkiPem.substring(
pemHeader.length,
spkiPem.length - pemFooter.length
);
var binaryDerString = window.atob(pemContents);
return str2ab(binaryDerString);
}
async function importPublicKey(spkiPem) {
return await window.crypto.subtle.importKey(
"spki",
getSpkiDer(spkiPem),
{
name: "RSA-OAEP",
hash: "SHA-1",
},
true,
["encrypt"]
);
}
async function encryptRSA(key, plaintext) {
let encrypted = await window.crypto.subtle.encrypt(
{
name: "RSA-OAEP",
},
key,
plaintext
);
return encrypted;
}
function str2ab(str) {
const buf = new ArrayBuffer(str.length);
const bufView = new Uint8Array(buf);
for (let i = 0, strLen = str.length; i < strLen; i++) {
bufView[i] = str.charCodeAt(i);
}
return buf;
}
function ab2str(buf) {
return String.fromCharCode.apply(null, new Uint8Array(buf));
}
Поскольку я никогда раньше не работал с шифрованием в PHP и не могу понять Javascript на 100%, я был бы благодарен за каждый удар в правильном направлении, какие PHP-функции мне нужны.
p>
Спасибо!
Пытался работать с функцией openssl_pkey_new, но не нашел правильного пути.
Подробнее здесь: https://stackoverflow.com/questions/784 ... ata-in-php
Мобильная версия