加密和解密 JavaScript 会话变量

问题描述 投票:0回答:1

我试图将相当敏感的信息存储到 JavaScript 会话对中,并且我尝试实现 CryptoJS。我的问题是我已经编写了加密和解密函数,但我担心密码短语会在 JavaScript 编码中暴露。我对加密/解密技术缺乏经验,希望得到一些指导。据我所知,我拥有的代码有效。再说一遍,我是否正确地处理了这个问题?

这些是我当前的加密和解密函数:

function EncryptString(Message){
    var PassPhrase = "secret";
    // Encrypt the Message using AES
    var EncryptedPassword = CryptoJS.AES.encrypt(Message, PassPhrase);
    return EncryptedPassword;
}

function DecryptString(EncryptedPassword){
    var PassPhrase = "secret";
    // Decrypt the Message using AES
    var DecryptedPassword = CryptoJS.AES.decrypt(EncryptedPassword, PassPhrase);
    // Convert the DecryptedPassword data to a string
    var DecryptedString = DecryptedPassword.toString(CryptoJS.enc.Utf8);
    return DecryptedString;
}
javascript session encryption
1个回答
0
投票

虽然您当前的实现确实使用 AES 加密和解密敏感信息,但将密码直接存储在 JavaScript 代码中确实存在安全风险。如果有人访问您的 JavaScript 代码,他们可以轻松找到密码并解密敏感数据。

为了增强实施的安全性,请考虑以下方法:

服务器端加密/解密:在服务器端而不是客户端(JavaScript)执行加密和解密操作。这样,密码和敏感数据就永远不会暴露给客户端。 使用安全通道:如果必须在客户端执行加密/解密,请确保将密码安全地传输到客户端(例如,通过 HTTPS),并且切勿直接在 JavaScript 代码中对密码进行硬编码。 密钥派生:不要对密码进行硬编码,而是使用 PBKDF2 或 bcryept 等密钥派生函数 (KDF) 从密码中派生密钥。这些函数旨在从密码安全地派生加密密钥。导出的密钥可用于加密和解密。 环境变量:将密码存储在服务器端的环境变量中,并在服务器端代码中从那里访问它。这样,密码就不会被硬编码到您的代码库中。 安全密钥存储:如果您需要在客户端存储密码(例如,用于会话持久性),请考虑使用浏览器存储机制,例如 sessionStorage 或 localStorage。但是,请注意,这些仍然容易受到某些攻击,例如 XSS(跨站脚本)。

这是一个示例,说明如何修改代码以使用 PBKDF2 等密钥派生函数

function EncryptString(message, passphrase) {
    // Derive key from passphrase using PBKDF2
    var key = CryptoJS.PBKDF2(passphrase, CryptoJS.enc.Utf8.parse("salt"), {
        keySize: 256 / 32, // 256-bit key
        iterations: 1000
    });



    // Encrypt the message using AES
    var encryptedMessage = CryptoJS.AES.encrypt(message, key, { iv: CryptoJS.lib.WordArray
© www.soinside.com 2019 - 2024. All rights reserved.