在JavaScript中使用加密技术有什么意义?

在JavaScript中使用加密技术有什么意义?,javascript,encryption,Javascript,Encryption,我的朋友有一个想法,通过使用库(如)对浏览器中存储的cookie添加加密来保护cookie 同时我认为这样的行动是不可能的,因为 问题是: 所述库的功能是什么 它加密什么我相信它的加密将仅限于js应用程序的变量,而不是主机上的文件Cookies实际上可以通过JavaScript访问,就像DOM一样 您可以通过运行要通过加密算法存储的值来加密它们 根据您想要存储的内容以及加密/解密机制的工作方式,这可能是一个好主意,也可能不是一个好主意。事实上,Cookies可以通过JavaScript访问,就像

我的朋友有一个想法,通过使用库(如)对浏览器中存储的cookie添加加密来保护cookie

同时我认为这样的行动是不可能的,因为

问题是:

所述库的功能是什么


它加密什么我相信它的加密将仅限于js应用程序的
变量
,而不是主机上的文件

Cookies实际上可以通过JavaScript访问,就像DOM一样

您可以通过运行要通过加密算法存储的值来加密它们


根据您想要存储的内容以及加密/解密机制的工作方式,这可能是一个好主意,也可能不是一个好主意。

事实上,Cookies可以通过JavaScript访问,就像DOM一样

您可以通过运行要通过加密算法存储的值来加密它们

根据您要存储的内容以及加密/解密机制的工作方式,这可能是个好主意,也可能不是个好主意。

您在问

什么样的数据可以使用javascript加密?

Bergi回答道:

通常,您可以加密所有可以用二进制表示的数据

没错,但这不是你真正想问的。我相信您正在寻找加密库在浏览器中有用的场景。但更多的是,再往下一点

我相信它的加密将限于js应用程序的变量,而不是主机上的文件

是和否。JavaScript可以访问的任何内容都可以加密。这种加密是否增加了安全性是另一个问题。可以对通过JavaScript代码中的变量访问的值进行加密。这同样适用于用户输入,其中包括用户为了在文件对话框()中上载而显式打开的文件。
此外,如果您真的需要,您的JavaScript代码还可以提供


下面是一些在JavaScript中使用加密技术可能有意义的场景,但并不是所有场景都推荐(不是详尽的,但很常见):

  • 文件存储(即),其中对称加密密钥从不发送到服务器,而是保存在客户端或由用户直接输入。它的安全性取决于您是否相信服务提供商不会更改自己的JavaScript并记录用于加密的密钥

  • 密码管理器(即)类似于文件存储,但它的代码被注入到其他站点,并且它必须具有弹性,不会脱口而出它的所有秘密。它可以使用许多不同的加密原语

  • 可怜人的HTTPS(即太多堆栈溢出问题),其中服务器有其RSA私钥,并通过HTTP(原文如此!)将RSA公钥发送到浏览器。浏览器可以加密任何数据并将其发送回服务器(也可以在此过程中建立对称密钥)。服务器可以使用其私钥解密消息并作出响应。只要没有中间人攻击者简单地注入自己的JavaScript将任何浏览器数据复制到攻击者的服务器,这就有点安全了。对于这个用例,SJCL实现了ElGamal加密而不是RSA加密

  • 上传前对数据进行散列,以检查传输错误或实现重复数据消除(无需上传文件,因为其他人已经这样做了)。从技术上讲,哈希是密码学领域中的一个分支,许多库都支持它

  • 在线计算器(即),当用另一种语言实现相同的算法时,可以直接使用有效且易于使用的实现或算法。数据从不发送到服务器,只在浏览器中加密。我的“计算器”可以用来测试自己的实现,因为它通过各种测试向量进行验证。还有一些是为了帮助朋友在没有正确加密的情况下传递隐藏的邮件

不应使用基于浏览器的加密来执行这些操作:

  • 如果您只使用HTTP上的对称加密,并且服务器和客户端上存在完全相同的密钥,那么您就有问题了,因为客户端必须以某种方式将密钥发送到服务器或返回。如果将加密密钥从服务器发送到客户端,或者以其他方式发送,则需要加密对称加密密钥。最简单的方法是使用TLS。如果您使用TLS,那么数据和密钥都是加密的,所以您不需要自己加密。这并没有提供任何安全性,只是有点模糊。任何被动攻击者(观察者)都可以读取您的消息。你应该读到:

  • 对登录密码进行哈希运算是一种糟糕的做法。一般的共识是,您需要多次散列密码(PBKDF2、bcrypt、scrypt、Argon2),以检查用户是否发送了正确的用户名和密码。有些人认为,如果我们在客户端散列,密码就不会通过网络以明文形式发送,一切都是安全的。问题是,如果他们这样认为,他们就没有使用HTTPS(他们需要)。同时,哈希密码是他们的新密码。如果服务器没有实现固定时间比较,那么使用定时侧通道攻击以您知道其用户名的任何人的身份登录是很简单的

  • JWT会议:和

    • 你在问

      什么样的数据可以使用javascript加密?

      Bergi回答道:

      通常,您可以加密所有可以用二进制表示的数据

      没错,但这不是你真正想问的。我相信您正在寻找加密库在浏览器中有用的场景。但更多的是,再往下一点