建议和反馈

请填写你的反馈内容

问答 > 密码学 > 问答详情
求助中

在谷歌应用引擎webapp上实施RSA10LK

这是一项任务。 我必须在google app引擎上创建一个Web应用程序,并应用rsa算法在app引擎数据存储上存储数据。 我的应用程序只存储用户创建的小笔记。 我已经完成了应用程序并且还应用了RSA来加密消息(从实现RSA算法获得代码)。 为此,我拆分字符串并将每个字符转换为ascii,然后将它们存储在重复的ndb.IntegerProperty但我不明白应该如何处理私钥和公钥。 我想知道在哪里存储私钥,一旦注释被加密并且用户再次访问它们,我如何获得公钥和私钥? 我是否应该将密钥存储在数据存储区中?

加密在服务器上完成,以加密用户保存的注释。 注释是字符串,它们被分成字符,然后它们的ascii值被加密。 一旦用户点击“添加备注”,所有这一切都在服务器端完成。

当用户登录时,解密在服务器端完成,并且他的用户id用于获取他已经存储的注释,这些注释被解密以获得原始的ascii值,然后形成原始字符串。

目前,代码中只生成一个密钥对。 链接到该应用程序: http : //cloudassignment-1102.appspot.com

如果我还需要添加源代码,请告诉我。


2019-11-08
0
请先登陆或注册

奔跑的元2019-11-08

理想情况下,您将私钥存储在某处(非常)安全。 由于GAE是您选择的平台,因此您有以下几种选择:

  • 将密钥放在项目的某个地方,源代码可以读取,但不公开(在Java中,这通常是资源文件夹或WEB-INF,不确定python的等价物是什么)

  • 使用云存储并将文件放在那里。 这有点开销,但如果你想改变关键的开心手术风格......

  • 由于键基本上只是一个字节数组,因此可以将它们定义为源中的常量字节数组。 这显然是最不灵活的选择。

编辑:

我只想说这是一项愚蠢的任务。 如果隐藏服务器上的所有加密,则使用非对称加密毫无意义。 由于您的数据在发送给用户之前总是被解密,因此基本上与对称加密相同或根本不加密。

但本着愚蠢的事情和学习的精神:

我假设您的代码为每个用户生成密钥对。 因此,无法将密钥存储为代码中的常量(GAE文件系统是只读的)。 相反,您可以使用任何类型的数据库(无论是云数据存储还是云数据库)。

由于您应该在某处拥有用户数据库实体,因此您可以将公钥与其他用户信息放在一起。 如果需要,您可以通过云端点从数据库提供公钥。 由于它不是秘密,因此您无需保护此端点。

密钥可以放在同一个存储中(数据存储区/云端sql?)但是我将它分开,这样你就无法查询它并意外地将其分发出来。 引用用户的附加表/实体应该足够了。


投一票
评论(0)
赞赏(0)
邀请

感谢您的善举,每一次解答会成为新人的灯塔,回答被采纳后获得20算力和相应的LK币奖励