我对构建一个个人使用的小型应用程序感兴趣,该应用程序将使用JavaScript在客户端加密和解密信息。加密的信息将存储在服务器上的数据库中,但绝不会存储解密的版本。
它不必是超级duper安全,但我想使用目前未被破坏的算法。
理想情况下,我可以做一些
var gibberish = encrypt(string, salt, key);
来生成编码的字符串,诸如此类
var sensical = decrypt(gibberish, key);
稍后再解码。
到目前为止,我看到的是:
http://bitwiseshiftleft.github.io/sjcl/
我还应该看看其他的图书馆吗?
这段代码是基于上面@Jorgeblom的回答。
@Jorgeblom我的朋友,这是一个很棒的小加密库:D
我有点碰它,因为我不喜欢我必须分配盐,然后再调用它但总的来说,对于我的需求是绝对完美的。
const crypt = (salt, text) => {
const textToChars = (text) => text.split("").map((c) => c.charCodeAt(0));
const byteHex = (n) => ("0" + Number(n).toString(16)).substr(-2);
const applySaltToChar = (code) => textToChars(salt).reduce((a, b) => a ^ b, code);
return text
.split("")
.map(textToChars)
.map(applySaltToChar)
.map(byteHex)
.join("");
};
const decrypt = (salt, encoded) => {
const textToChars = (text) => text.split("").map((c) => c.charCodeAt(0));
const applySaltToChar = (code) => textToChars(salt).reduce((a, b) => a ^ b, code);
return encoded
.match(/.{1,2}/g)
.map((hex) => parseInt(hex, 16))
.map(applySaltToChar)
.map((charCode) => String.fromCharCode(charCode))
.join("");
};
你使用它
// encrypting
const encrypted_text = crypt("salt", "Hello"); // -> 426f666665
// decrypting
const decrypted_string = decrypt("salt", "426f666665"); // -> Hello