【发布时间】:2018-09-10 11:42:02
【问题描述】:
我正在 aws lambda 上创建一个无数据库网站。用户将能够发布消息。如果他有正确的密码(例如 example.com/pageid/edit/passwordkey/ 之类的 url),他也可以编辑页面。我希望能够在没有数据库的情况下对用户进行身份验证。我正在使用 s3,但 s3 上的数据将是公开的,因此我无法将密码存储在 s3 中。
这是我目前的解决方案:
function save(pageid,data){
s3.putObject({Key:pageid,Body:data});
password = sha256(pageid + "SALTPHRASE");
print({password:password});
}
function authenticate(pageid,password,newdata){
if(sha256(pageid+"SALTPHRASE") == password){
s3.putObject({Key:pageid,Body:newdata});
}
}
这种方法的问题是,是否有人在将来的任何日期学习了saltphrase。他们可以访问网站上的所有数据,因为 pageid 是公开的。
我不擅长加密主题,我只有一些基本的了解,所以我不确定这是否可行。我怎样才能在nodejs上做到这一点。更具体地说,我想使用类似 SSL 的加密来生成公钥和私钥。这样我就不会依赖一种我以后无法改变的盐。
- 我生成了一个公钥和私钥
- 我将公钥与文件一起保存,将私钥提供给用户
- 在进行身份验证时,我只需使用文件上的公钥加密消息,然后使用用户提供的私钥对其进行解密。如果消息相同,我将对用户进行身份验证。
我不知道哪些库可以做到这一点(更具体地说是在 nodejs 中)。哪种加密方法最好,或者这种方法是否有其自身的弱点。
谢谢。
【问题讨论】:
-
请将您的问题限制在一个主题/问题上,否则您将无法获得完整的答案
标签: javascript node.js encryption passwords public-key-encryption