【问题标题】:How can I encrypt a string in Javascript and keep it secure?如何在 Javascript 中加密字符串并确保其安全?
【发布时间】:2026-01-08 17:20:03
【问题描述】:

我想在 Javascript 中加密一个字符串,然后通过 GET 将该字符串传递给 PHP,然后在 PHP 中解密该字符串。

如何在 Javascrpt 中对字符串保密?

例如,我使用 CryptoJS crypt(message, secret_passphrase),如何让用户远离查看源代码查看密码?

我不能使用任何服务器端编程。我在 Sharepoint 页面中使用 Javascript 代码,而服务器端编程需要 Visual Studio。 实际上我想从 Sharepoint 向 PHP 发送一个包含当前用户用户名的加密字符串,这样我就可以直接在 PHP 中对用户进行身份验证,而无需登录页面(我将其解密并将其与 MySQL 数据库中的一些用户名进行比较,如果用户名找到了,我可以继续登录)。

我提到这一点是为了让你可以大致了解我在做什么。

【问题讨论】:

  • 为什么secret_passphrase 需要隐藏起来,因为他们可以看到message? HTTPS/TLS 用于传输安全性。
  • 通过 javascript 加密字符串是没有意义的,因为密钥将公开可用。只需使用 SSL/TLS (HTTPS),您的问题就解决了。

标签: javascript php security


【解决方案1】:

如果您不能以服务器方式执行此操作,那么 JavaScript 没有绝对的方式来执行此操作。由于所有 JavaScript 文件都下载到客户端浏览器,因此用户可以访问这些文件。稍加努力,他就能破解密码。

您可能想看看 JavaScript 的混淆。请看这个SO

【讨论】:

    【解决方案2】:

    一种可能的解决方案是为每个浏览器会话存储在本地存储中的不同密钥。

    // Generate secret key
    var key = "???";
    
    // Store in local storage
    localStorage.setItem('key', key);
    

    那么当你需要加密某些东西时:

    var key = localStorage.getItem('key');
    var secure = crypt(message, key);
    

    通过这种方式,密钥被本地化到用户浏览器,这意味着他们是否知道并不重要,因为他们很可能是最初创建消息的用户。

    【讨论】:

    • 服务器在不知道密钥的情况下如何解密?
    • @Augwa 我想用 PHP 解密它,我会知道密钥,因为我将是创建它的人
    • OP 说 I can't use any server side programming,但随后提到了 PHP。所以,不确定它到底是什么。
    • @Augwa 我可以控制 PHP,我唯一不能在服务器端做的是 Sharepoint 的 Javascript 部分
    • @HelloLili 客户端需要知道密钥,并且由于您必须将其包含在您的 javascript 中,您刚刚删除了加密的好处,因为密钥是公开可用的。正如我们在上面的 cmets 中提到的,这就是使用 HTTPS 的目的。
    【解决方案3】:

    就像 aksappy 所说,Javascript 中的所有内容都是按定义可用的,因此如果有密钥,则密钥不会被隐藏。 如果这将要传输用户名,则无需 IMO 对其进行加密。攻击者知道用户名的可能性取决于所使用的协议。因此,您应该使用 HTTPS 而不是 HTTP。

    【讨论】: