Python密文长度必须等于密钥大小不同字符串长度传递给s

2024-10-01 02:35:21 发布

您现在位置:Python中文网/ 问答频道 /正文

在将加密消息从客户端传递到服务器后,我在解码时遇到了问题。我正在使用Cryptography。我正在客户端使用以下脚本对消息进行编码:

encMessage = public_key.encrypt(message, padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA1()), algorithm=hashes.SHA1(),label=None))

在编码之后,客户端的len()函数正确地告诉我,encMessage的长度是256。另外,type()函数告诉我encMessage'str'。打印时的encMessage如下所示:

I\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传递给服务器时,在服务器端使用以下代码后:

^{pr2}$

我得到了一个错误:“密文长度必须等于密钥大小”。我检查了这个,现在服务器端的len()函数在encMessage上使用,给我的不是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.')
        });

说明:

点击angular网站的getMessageEncrypted函数将post变量中的message发送到django REST frameworkapieview,然后在客户端序列化用python编写的对象。在序列化程序中,消息使用以下方式加密:

encMessage = public_key.encrypt(message, padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA1()), algorithm=hashes.SHA1(),label=None))
dataEncrypted = {'encMessage': encMessage};
return dataEncrypted

并使用类似字典的变量将dataEncrypted发送回angular。然后,该消息通过angular的checkMessage函数(也使用post)发送到django REST框架apieview,然后在服务器端序列化对象。在服务器的序列化程序中,消息解密使用:

^{pr2}$

同样地发送回angular in数据解密的字典类变量。但是,这从来没有发生过,因为在解密行中我得到的密文长度必须等于密钥大小错误。在

我认为加密消息从客户端的python函数发送到angular时,客户端angle的边界上的消息编码(如utf-8、unicode等)会发生一些变化,或者在服务器端将加密消息从angular发送到python APIview时,角度服务器的边界上会发生一些变化。在

我真的很抱歉可能没有“命名”的经验。我不太喜欢恰当的命名法。在

解决方案

用户mata回答了我的问题。我要做的是用base64对加密消息进行编码,然后将其返回angular并发送到服务器api。然后在服务器端,我不得不从base64解码它,然后解码消息。再次感谢你!在


Tags: 函数服务器消息客户端message编码服务器端function
1条回答
网友
1楼 · 发布于 2024-10-01 02:35:21

加密的消息是一个二进制数据块,在javascript中似乎将其视为字符串,但javascript字符串不是为二进制数据而设计的,当传输格式为json时,它会变得更加复杂。在

标准的方法是在发送加密消息之前对其进行base64编码,并在接收到消息时对其进行解码。在

相关问题 更多 >