Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用javascript加密字符串,可以用密码解密,可以';不要轻易被粗暴地强迫_Javascript_Json_Encryption_Passwords_Aes - Fatal编程技术网

用javascript加密字符串,可以用密码解密,可以';不要轻易被粗暴地强迫

用javascript加密字符串,可以用密码解密,可以';不要轻易被粗暴地强迫,javascript,json,encryption,passwords,aes,Javascript,Json,Encryption,Passwords,Aes,我希望能够做到这一点: 使用用户的密码在浏览器中加密字符串 将该字符串发送到我的服务器 允许任何人从我的服务器请求该字符串 该字符串可以由使用密码的人解密 任何没有密码的人都需要数百万美元/年才能解密字符串 我找到了使用AES加密和解密密码的方法。但是用我的数据测试它,解密函数在50毫秒内运行。仅在浏览器中,一天就有1728000次密码尝试。如果有人真的想破坏加密,我相信这在短期内是可行的 我的第二个直觉是,我应该在服务器上保留密码。您发送所需数据的ID和密码,然后它会发回您的加密数据。这解决了

我希望能够做到这一点:

  • 使用用户的密码在浏览器中加密字符串
  • 将该字符串发送到我的服务器
  • 允许任何人从我的服务器请求该字符串
  • 该字符串可以由使用密码的人解密
  • 任何没有密码的人都需要数百万美元/年才能解密字符串
  • 我找到了使用AES加密和解密密码的方法。但是用我的数据测试它,解密函数在50毫秒内运行。仅在浏览器中,一天就有1728000次密码尝试。如果有人真的想破坏加密,我相信这在短期内是可行的

    我的第二个直觉是,我应该在服务器上保留密码。您发送所需数据的ID和密码,然后它会发回您的加密数据。这解决了#3的问题,但如果我真的想解密,我仍然可以解密数据


    如果服务器运行者我不需要被信任,有没有办法做到这一点?假设用户可以信任/验证他们发送到服务器的数据以及在浏览器中的加密方式。

    等等,我想我已经找到了答案

    用户将拥有一个密码,该密码的哈希将被发送到服务器。用户只有在拥有密码哈希的情况下才能访问其数据

    数据将用类似AES的东西进行加密,但用于加密的密钥也将是其密码的散列。突然间,每天1728000次尝试似乎很小,因为密码不会出现在字典或任何东西中。这将是一个很长的无意义字符串


    阅读本文的任何人都能确认这是正确的方法吗?

    如果您试图防止暴力破解密钥猜测,那么您只需要一个长的加密密钥。密钥越长,随机性越强(例如,您的情况下的密码),猜测它所需的时间就越长。因此,如果您强制使用很长的密码并使用现代加密算法(其中有很多),那么数据应该是相当安全的。如果已知哈希算法(如果它在Javascript中,听起来像是),那么这就归结为猜测密码,而不是猜测哈希。因此,这完全取决于密码的长度和唯一性。按照您的建议使用散列可以使服务器不必知道密码(这是一件好事),但如果是弱密码,则不会使数据更加安全。@jfriend00缓慢的密码散列算法在这里有帮助吗?类似于bcrypt的东西。似乎它可能。。。然后,对于您想要尝试的每个密码,您需要首先使用一个缓慢/计算量大的算法对其进行散列。谢谢你的帮助。@jfriend00显然复杂的密码会更有用,但是一个缓慢的散列会有一到两个数量级的帮助吗?计算密集的散列操作不会伤害你,但是一个有决心的黑客可以用硬件来解决这个问题,以比你想象的快得多的速度生成数百万个哈希,所以它本身并不是一个解决方案。一个不可预测的长长度加密密钥和一个好的、现代的加密算法是安全的方法。如果您决心避免要求一个好的、强大的密码,那么整个讨论取决于您真正愿意接受哪种级别的安全危害,因为您拒绝执行保护数据的最重要方面。这里有很多好的阅读材料: