我想在發送之前使用PGP JavaScript API加密表單。 PGP部分可以工作,但表單不會發送表單字段的js-modified值。表單沒有獲取更新的字段值
這裏是JavaScript:
<script>
function encryptForm() {
var password = document.getElementById("form_password");
var email = document.getElementById("form_email");
email.setAttribute("type", "hidden");
password.setAttribute("maxlength", "2000");
password.setAttribute("type", "hidden");
var form = document.forms[index];
var password = form.elements["password"];
var email = form.elements["password"];
encrypt(email.value).then(function(encrypted_msg) {
email.value = encrypted_msg;
});
encrypt(password.value).then(function(encrypted_msg) {
password.value = encrypted_msg;
});
form.submit();
return true;
}
function encrypt(msg) {
if (msg.indexOf("-----BEGIN PGP MESSAGE-----") !== -1 && msg.indexOf("-----END PGP MESSAGE-----") !== -1) {
return msg;
} else {
var key = `<?php printf($eassec->getPubkey('server')); ?>`;
var publicKey = openpgp.key.readArmored(key).keys[0];
return openpgp.encryptMessage(publicKey, msg).then(function(pgpMessage) {
return pgpMessage;
});
}
}
</script>
和表單元素:
<form onSubmit="return encryptForm()" class="EASboxForm" method="post">
<input id="form_email" name="email" type="email" placeholder="email adress" required autofocus>
<input id="form_password" name="password" type="password" placeholder="password" maxlength="72" required>
<input name="action" type="hidden" value="connect">
<input type="image" class="EASboxFormSend" src="resources/pics/icons/form_continue.svg" alt="Continue">
</form>
(你可以住在[刪除]測試 - PHP的一部分將顯示一條錯誤消息,如果發數據不是有效的PGP消息,如果一切正確,則散列密碼和電子郵件將顯示)
您可以使用客戶端JavaScript加密,但它不是非常安全。 – gcampbell
當然不會,因爲您在發送之前不等到加密完成。 – vsync
@gcampbell更安全,不使用任何東西 – Squared