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

时间:2015-10-20 09:59:28

标签: python google-app-engine encryption cryptography

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

  • 将密钥放在项目的某个地方,源代码可以读取,但不公开(在Java中,这通常是资源文件夹或WEB-INF,不确定python的等价物是什么)
  • 使用云存储并将文件放在那里。这有点开销,但如果你想改变关键的开心手术风格......
  • 由于键基本上只是一个字节数组,因此您可以将它们定义为源中的常量字节数组。这显然是最不灵活的选择。

编辑:

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

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

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

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

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