我生成一个RSA密钥:
random_generator = Random.new().read
k1 = RSA.generate(1024,random_generator)
如果我从k1导出所有工作创建一个新密钥:
export = k1.exportKey()
k2 = RSA.importKey(export)
如果我用k1加密并用k2解密,一切都很好 . 我想保存“export”然后用它来创建一个新密钥k3,这样我就可以用k1加密并用k3解密 . 到目前为止没有运气 . 这是我尝试过的:
class SavedKey(db.Model):
k = db.BlobProperty()
r = SavedKey()
r.k = export
r.put()
我检索的内容不起作用:
retrieved =db.GqlQuery("Select * from SavedKey ").fetch(1000)[0]
retrieved = saved.k
k3 = RSA.importKey(retrieved)
“已检索”采用正确的私钥格式,但其 Value 与原始“导出”不同 . k3适用于加密和解密,但由k1加密当然不会用k3解密,这正是我想要实现的 .
我究竟做错了什么?
1 回答
你做错了是,你正在检索错误的实体 . 考虑到
检索数据存储区中的
SavedKey
实体之一SavedKey
. 相反,如果你确定你检索从export
构建的实际的那个(很难做到,因为你的SavedKey
模型没有识别属性),一切都会正常工作 .这是一个例子(使用
ndb
,因为继续使用旧的db
没有意义):......这会很好用 .