AESを使用してフォームをサーバーに送信する前に、node forgeを使用してフォームを暗号化しています。未知のURIError:jQueryでURIの形式が正しくないエラー
今の暗号化部分のコードは
const bigInt = require("big-integer");
const forge = require('node-forge');
function generateParams() {
// Cryptographic random number generator
var array = new Uint32Array(2);
var _key = bigInt(window.crypto.getRandomValues(array)[0]).toString();
var _iv = bigInt(window.crypto.getRandomValues(array)[1]).toString();
// generate random key and IV
var key = forge.util.encode64(_key);
var iv = forge.util.encode64(_iv);
const params = {
key: key,
iv: iv
}
return params;
}
function encrypt(params) {
var cipher = forge.rc2.createEncryptionCipher(params.key);
cipher.start(params.iv);
// Encrypting "testing"
cipher.update(forge.util.createBuffer("testing"));
cipher.finish();
return cipher.output;
}
function decrypt(params, encrypted) {
var cipher = forge.rc2.createDecryptionCipher(params.key);
cipher.start(params.iv);
cipher.update(encrypted);
cipher.finish();
return cipher.output;
}
で、jQueryの機能は
$('#recordForm').submit(function(event) {
// Stop form from submitting normally
event.preventDefault();
// Grab form data
// Crypto
const params = generateParams();
const encryptedForm = {
test: encrypt(params),
}
console.log("Encrypted: " + encryptedForm.test);
const decryptedForm = {
test: decrypt(params, encryptedForm.id).data,
}
console.log("Decrypted: " + decryptedForm.test);
});
私の問題は、私は戻ってき(cryptob.jsがある保つことである(まだ投稿ではない)であります
Uncaught URIError: URI malformed
at decodeURIComponent (<anonymous>)
at Object.util.decodeUtf8 (cryptob.js:24437)
at ByteStringBuffer.util.ByteStringBuffer.toString (cryptob.js:23490)
at HTMLFormElement.<anonymous> (cryptob.js:1282)
at HTMLFormElement.dispatch (jquery-3.1.1.slim.min.js:3)
at HTMLFormElement.q.handle (jquery-3.1.1.slim.min.js:3)
を呼び出すと、私のファイルの名前です。。
ここにthisという回答があり、特別なメタタグを含めることをお勧めします。私はそれをしましたが、それはまだ動作しません。オンラインいくつかのリソースは、それがUTF-8エンコーディングに関係していると言うので、私は
cipher.update(forge.util.createBuffer(encodeURIComponent("testing")));
または
cipher.update(forge.util.createBuffer("testing", 'utf8'));
で
cipher.update(forge.util.createBuffer("testing"));
を交換しようとしたが、それはどちらか動作しませんでした(上のベースencodeURIComponent(str))。
あなたはhereを偽造テストすることができ、あなたは(私がやっている本質的である)、このコード
var forge = require("node-forge")
// generate a random key and IV
var key = forge.util.encode64("12354523465");
var iv = forge.util.encode64("2315");
// encrypt some bytes
var cipher = forge.rc2.createEncryptionCipher(key);
cipher.start(iv);
cipher.update(forge.util.createBuffer("testing"));
cipher.finish();
var encrypted = cipher.output;
console.log(encrypted);
// decrypt some bytes
var cipher = forge.rc2.createDecryptionCipher(key);
cipher.start(iv);
cipher.update(encrypted);
cipher.finish();
console.log(cipher.output.data)
を実行する場合、それが正常に動作します。
どうすればこの問題を解決できますか?
RC2はAESとは異なる暗号です。ドキュメントへのアクセスには、 'var cipher = forge.cipher.createCipher( 'AES-CBC'、key);または' forge.aes.createEncryptionCipher(key); 'を使用してください。また、CBCモードは使用しないでください。 GCMモードを使用する方が良いです。 –