JavaScript消息系统加密

时间:2015-03-27 02:25:20

标签: javascript php encryption rsa

我正在尝试使用JavaScript和PHP / MySQL创建一个消息系统。我有一个带有两个输入元素的表单(收件人ID,邮件内容)。我正在使用MVC(Zend Framework 1)。表单发布数据将发送到我的控制器并存储在数据库中。

现在我想在邮件发送之前对其进行加密。我想保持用户友好,所以我的想法是使用RSA(私钥/公钥)。其想法是在用户登录时生成私钥并将其存储在cookie中,以确保私钥仅在用户的计算机上。公钥可以存储在用户的表中,以便任何想要向他发送消息的用户可以加密数据。

密钥对由用户密码生成很重要。如果它是随机生成的,则无法使用多个系统登录,因为私钥每次都会更改。所以这将是确保他将永远拥有相同私钥的机制,直到他更改密码。

我尝试了一些JavaScript库。 cryptico似乎是正确的选择,因为它通过密码生成私钥/公钥。这里的问题是,我无法存储私钥,甚至没有查看值。

他们在网站上有一个例子

// The passphrase used to repeatably generate this RSA key.
var PassPhrase = "The Moon is a Harsh Mistress."; 

// The length of the RSA key, in bits.
var Bits = 1024; 

var MattsRSAkey = cryptico.generateRSAKey(PassPhrase, Bits);

当我尝试输出MattsRSAkey时,我只得到[Object object]。当我将它存储在Cookies中时,它是一样的。我试图使用JSON.stringify。使用此功能,我可以存储并查看MattsRSAKey。但是当我想稍后使用它来解密消息时,我收到一个错误,我没有有效的公钥。我认为私钥在存储时会被破坏。当我从Cookies中读取私钥时,我使用JSON.parse。

有什么方法可以解决我的问题吗?我只想将来自多个用户(公钥)的加密消息发送给一个用户(私钥)。我的目的不是要有安全的传输,而是要将加密的消息存储在数据库中,这样未经授权的人就无法读取它。重要的是,我不仅要对一对一消息进行加密。这很容易,因为两个用户只需要共享密码进行加密。

1 个答案:

答案 0 :(得分:2)

这里有一些错误。

首先,您尝试直接在Cookie中存储Javascript对象。这不会起作用:cookie只能存储字符串值。您需要将密钥序列化为字符串以将其存储在cookie中;遗憾的是,似乎隐秘库没有公开任何方法来执行此操作,因此您需要实现自定义序列化程序,或使用其他加密库。

其次,您将私人加密密钥数据存储在Cookie中。这可能是最难存储的地方,因为cookie会在每次请求时发送到Web服务器。 Local storage在这里更合适,因为它只能通过Javascript代码访问。