Moh*_*her 5 python string cryptography
我在将加密消息从客户端传递到服务器后对其进行解码时遇到问题。我正在使用密码学。我使用下面的脚本在客户端对消息进行编码:
encMessage = public_key.encrypt(message, padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA1()), algorithm=hashes.SHA1(),label=None))
Run Code Online (Sandbox Code Playgroud)
编码后,客户端的len()函数正确地告诉我encMessage 的长度为 256。type()函数还告诉我encMessage是'str'。打印时的 encMessage看起来像这样:
我\xf0gr\xf5\xf8\xf2F\xde\xc7\xe4\x91\xa1F3\xc1\x05\x06\xd7Y:\xc9\xcf\xed'\xf49\xd5\x99Z\xed\x93\xba8\xdd\ x0b\xe3?
但是,当我使用rest_framework将此encMessage传递到服务器时,在服务器端使用以下代码后:
message = private_key.decrypt(encMessage,padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA1()), algorithm=hashes.SHA1(),label=None))
Run Code Online (Sandbox Code Playgroud)
我收到错误:“密文长度必须等于密钥大小”。我检查了这一点,现在encMessage上使用的服务器端的len()函数给我的不是 256,而是更小的值。type()函数还显示'unicode'。
我认为从客户端发送到服务器的数据期间encMessage转换存在问题,但我不知道该怎么处理。
预先感谢您的任何建议!
编辑:
回答有关显示我如何与服务器通信并发送数据的评论 - 这就是我所做的:
data = {'message': $scope.message};
loginApi.getMessageEncrypted(data)
.success(
function(dataEncrypted) {
loginApi.checkMessage(dataEncrypted['encMessage'])
.success(
function(dataDecrypted) {
$log.log('Server responded properly');
})
.error(
function(errorInfo, status) {
$log.info('Server user data answer error.')
});
})
.error(
function(errorInfo, status) {
$log.info('Client encryption error.')
});
Run Code Online (Sandbox Code Playgroud)
解释:
单击网站上的某个按钮后,Angular 的getMessageEncrypted函数使用post将数据变量中的消息发送到django REST 框架APIview,然后在客户端用 python 编写的序列化器对象。在序列化器中,消息使用以下方式加密:
encMessage = public_key.encrypt(message, padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA1()), algorithm=hashes.SHA1(),label=None))
dataEncrypted = {'encMessage': encMessage};
return dataEncrypted
Run Code Online (Sandbox Code Playgroud)
并使用dataEncrypted类似字典的变量发送回 Angular 。然后该消息使用 Angular 的checkMessage函数(也使用post)发送到django REST 框架APIview,然后发送到服务器端的序列化器对象。在服务器的序列化器中,消息使用以下方式解密:
message = private_key.decrypt(encMessage,padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA1()), algorithm=hashes.SHA1(),label=None))
Run Code Online (Sandbox Code Playgroud)
并类似地发送回dataDecrypted类似字典的变量中的 Angular。然而,这永远不会发生,因为在解密行中我得到密文长度必须等于密钥大小错误。
我认为当加密消息从客户端的 python 函数发送到 Angular 或 Angular 服务器的边界时,客户端 Angular 的边界上的消息编码(如 utf-8、unicode 等)会发生一些变化当加密消息从 Angular 发送到服务器端的 Python APIview 时。
我真的很抱歉可能缺乏“命名”经验。我不太喜欢正确的术语。
解决方案
用户mata回答了我的问题。我所要做的就是使用Base64对加密消息进行编码,然后将其返回到 Angular 并将其发送到服务器 api。然后在服务器端我必须从base64解码它,然后解码消息。再次感谢你!
您的加密消息是一个二进制数据块,您似乎将其视为 javascript 中的字符串,但 javascript 字符串不是为二进制数据制作的,当传输格式为 json 时,它会变得更加复杂。
标准方法是在发送之前对加密消息进行 Base64 编码,并在接收时对其进行解码。
| 归档时间: |
|
| 查看次数: |
7224 次 |
| 最近记录: |