我正在尝试使用本地En / Decryption构建日记系统,以便用户只能使用密码来读取条目,密码不会存储在服务器上。 加密应该用Javascript(CryptoJS)完成,但我必须在它发送之前操纵HTML表单的数据。 如果可能,由于性能和带宽,这应该在没有JQuery的情况下完成。 因为我对java脚本相对较新,我不知道,当提交按钮被点击时,如何操作表单中的数据? :)
var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase");
答案 0 :(得分:1)
我不知道你为什么认为jquery很慢或者给你发送大量数据。 但你可以将任何jquery代码转换为普通的javascript,所以这应该没问题。我将在jquery中给出一些提示,因为我不知道纯js中的所有内容,也不会谷歌这个为你:)
$("#submitbutton").click(function(event){
event.preventDefault(); //Prevent form beeing send
var allFormDatas = {}; //Object thats stores all form data
$.each($("#youtform").find("input"),function() { //loop over all inputs in the form
allFormDatas[$(this).attr("name")] = $(this).val(); //Gets the value from an form element and puts into "allFormDatas"
});
var stringForEncryption = JSON.stringify(allFormDatas); //Now we have one long Json string for encryption
var encrypted = CryptoJS.AES.encrypt(stringForEncryption, "Secret Passphrase");
//Now use $.post here to send post data to your backend.
});
//Encryption should be
encrypted>decrypt>parseJson>jsObject
PS:这没有经过测试,也不会得到下拉列表和复选框元素,但是我希望你能得到一个想法:)
编辑:更智能的解决方案......感谢@dandavis:
$( "form" ).on( "submit", function( event ) {
event.preventDefault();
var formString = $( this ).serialize(); // All data in one String.
var encrypted = CryptoJS.AES.encrypt(formString, "Secret Passphrase");
//Now use $.post here to send post data to your backend.
});