【问题标题】:Passing encrypted data between Python Gae and Client在 Python Gae 和客户端之间传递加密数据
【发布时间】:2015-10-18 03:35:23
【问题描述】:

我正在尝试学习如何在服务器(Python gae)和客户端(jquery)之间传递加密数据

以下代码片段草图在服务器上工作:

random_generator = Random.new().read
key = RSA.generate(1024,random_generator)

publicKey        =  key.publickey()
clearText        =  "this is a test message"
b64Text          =  base64.b64encode(clearText)
ecryptedText     =  publicKey.encrypt(b64Text,32)

b64DecryptedText =  key.decrypt(encryptedText)  
clearText        =  base64.b64decode(b64DecryptedText)

我不明白将什么作为公钥传递给客户端,客户端可以使用该公钥进行加密 (使用http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js

【问题讨论】:

  • 谢谢你,Artjom。将继续学习 JSBN。

标签: javascript python encryption rsa pycrypto


【解决方案1】:

1。向客户端发送公钥

客户端只需要公钥来加密服务器可以解密的东西。 RSA 公钥由模数 n 和公共指数 e 组成。简单的方法是将这两个部分作为十六进制编码的字符串发送。

modulus = hex(key.publickey().n)[2:-1]
exponent = hex(key.publickey().e)[2:-1]

2。使用公钥加密

CryptoJS 不提供 RSA 实现,但 jsbn (GitHub) 提供。我们将公共组件作为十六进制发送是一件好事,因为 jsbn 期望模数和公共指数作为十六进制编码的字符串:

var rsa = new RSA();
rsa.setPublic(n_string, e_string);
var res = rsa.encrypt(plaintext);

请记住,RSA 只能加密不大于模数的数据。如果生成 1024 位密钥,则无法加密大于 1024 位的数据。如果你想加密更大的数据,你需要Hybrid Encryption,例如 AES。

jsbn 也只使用 pycrypto 支持的 PKCS#1 v1.5 填充。您可以尝试未合并的pull request #3 以获得比 v1.5 填充更安全的 PKCS#1 v2 OAEP。

3。 python中的解密

jsbn 返回一个十六进制编码的密文。您可以根据需要安全地发送它,但您需要在 python 中解密之前将其解码(未显示)为字节。

sentinel = Random.new().read(32) # denotes the error result of the decryption 
cipher = PKCS1_v1_5.new(key) # private key
message = cipher.decrypt(ciphertext, sentinel)
if sentinel != message:
    print("success: " + str(message))
else:
    print("failure")

【讨论】:

  • 建议的大纲对指导我的学习很有帮助。我还找到了一个使用 AES 的完整示例,它完全列出了我需要的协议:加密:从 PyCrypto 到 CryptoJS,gist.github.com/marcoslin/8026990
  • @Horacio 很好。如果你在我的代码中发现问题,那么你可以建议编辑(添加一个清晰的编辑摘要,否则会被审阅者拒绝)或在评论中告诉我。如果您有完整且带注释的解决方案,您还可以添加自己的答案。
  • 在我添加自己的答案之前:客户端加密的字符串(几乎)在服务器上被正确解密,除了解密的字符串作为一组前导非打印字符。我做错了什么? github.com/HoracioMolino/pythonGaeAES
  • 我没有查看代码,但认为您使用了错误的填充。如果您将生成的纯文本打印为十六进制,您会在开头看到 0x0002 字节吗?
  • 生成的明文为十六进制:02:62:3a:2d:d5:57:d3:de:d1:9b:ba:b5:2a:70:63:72:d8:a0: 45:7c:81:65:33:77:24:d6:24:e3:4f:ec:c4:be:e7:24:18:37:dc:46:8b:0b:28:7e:f9: a7:bc:e9:51:12:dd:cb:59:e4:65:b9:15:15:da:64:be:01:a8:25:28:b1:d0:a7:0a:1f: 79:86:95:c8:3d:d6:e2:c3:4d:b0:cf:97:23:6b:2f:b5:3d:58:00:54:68:69:73:20:69: 73:20:61:20:70:6c:61:69:6e:20:6d:65:73:73:61:67:65:20:66:72:6f:6d:20:74:68: 65:20:63:6c:69:65:6e:74:2e
猜你喜欢
  • 2012-07-05
  • 2020-09-02
  • 2012-08-01
  • 2016-12-11
  • 1970-01-01
  • 2013-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多