加密javascript中的字符串,可以用密码解密,不易被暴力破解
Encrypt string in javascript, that can be decrypted with a password, that can't be easily brute-forced
我希望能够做到这一点:
- 使用用户提供的密码在浏览器中加密字符串
- 将该字符串发送到我的服务器
- 允许任何人从我的服务器请求该字符串
- 字符串可以被知道密码的人解密
- 任何没有密码的人应该需要数百万dollars/years来解密字符串
我发现 this thread 使用 AES 来加密和解密密码。但是用我的数据测试它,解密函数在 50 毫秒内运行。那将是每天 1,728,000 次密码尝试,仅在浏览器中。如果有人真的想破解该加密,我相信它可以在短期内完成。
我的第二个直觉告诉我应该将它保存在服务器上并设置密码。您发送所需数据的 ID 和密码,它会发回您的加密数据。这解决了#3 的问题,但是如果我真的想要,我 仍然可以解密数据。
有没有办法做到这一点,我,服务器运行者,不需要被信任?假设用户可以 trust/validate 他们向服务器发送的数据,以及这些数据在浏览器中的加密方式。
等等,我想我已经弄明白了。
用户将有一个密码,其哈希值将被发送到服务器。用户只有拥有密码的哈希值才能访问他们的数据。
数据将使用 AES 之类的方法加密,但用于加密的密钥也是其密码的哈希值。突然间 1,728,000 attempts/day 似乎很小,因为密码不会出现在字典或其他任何东西中。这将是一个很长的废话字符串。
任何阅读本文的人都可以确认这是否是正确的方法吗?
我希望能够做到这一点:
- 使用用户提供的密码在浏览器中加密字符串
- 将该字符串发送到我的服务器
- 允许任何人从我的服务器请求该字符串
- 字符串可以被知道密码的人解密
- 任何没有密码的人应该需要数百万dollars/years来解密字符串
我发现 this thread 使用 AES 来加密和解密密码。但是用我的数据测试它,解密函数在 50 毫秒内运行。那将是每天 1,728,000 次密码尝试,仅在浏览器中。如果有人真的想破解该加密,我相信它可以在短期内完成。
我的第二个直觉告诉我应该将它保存在服务器上并设置密码。您发送所需数据的 ID 和密码,它会发回您的加密数据。这解决了#3 的问题,但是如果我真的想要,我 仍然可以解密数据。
有没有办法做到这一点,我,服务器运行者,不需要被信任?假设用户可以 trust/validate 他们向服务器发送的数据,以及这些数据在浏览器中的加密方式。
等等,我想我已经弄明白了。
用户将有一个密码,其哈希值将被发送到服务器。用户只有拥有密码的哈希值才能访问他们的数据。
数据将使用 AES 之类的方法加密,但用于加密的密钥也是其密码的哈希值。突然间 1,728,000 attempts/day 似乎很小,因为密码不会出现在字典或其他任何东西中。这将是一个很长的废话字符串。
任何阅读本文的人都可以确认这是否是正确的方法吗?