def issue3(sk, pkR, nonce):
# 创建RSA私钥对象
sk = RSA.import_key(sk)
# 创建RSA公钥对象
pkR = RSA.import_key(pkR)
# 使用公钥加密nonce 客户端用自己的pkR进行nonce的加密,然后把加密值nonce1发送给服务端
#服务端使用自己的私钥sk对加密后的nonce1进行签名,返回预签名signature -psig
cipher = PKCS1_OAEP.new(pkR)
encrypted_nonce = cipher.encrypt(nonce.encode())
print("pkR加密后的nonce", encrypted_nonce)
# 对加密后的nonce进行哈希处理
hashed_nonce = hashlib.sha256(encrypted_nonce).digest()
# 使用SHA256算法创建哈希对象
h = SHA256.new(hashed_nonce)
print("pkR加密后的nonce的摘要h", h)
# 对哈希对象进行签名
signer = pkcs1_15.new(sk)
signature = signer.sign(h)
print("signature", signature)
return signature, encrypted_nonce
以上函数是服务端里进行的,它返回了一个bytes类型的签名signature和加密值encrypted_nonce,我在后面的代码中将这两个值传入了数据库,然后客户端从数据库中取出这两个值进行操作。但是从数据库中select出来的encrypted_nonce类型是str,长度是729太长了用不了,我用密钥解密密文的时候需要的是256字节的密文长度。但是通过调试发现bytes类型的密文和select出来的str类型的密文长的是一模一样的,但就是类型不一样,且长度也不一样。用encode方法试图将str类型的密文转化为bytes类型,但是它将里面的反斜杠给转义掉了,并且长度还是729。我想要的是它转化为bytes类型之后的值,和原来的一模一样,就是不要转义反斜杠。有什么办法吗?
issue3函数返回的encrypted_nonce值为:
b'g\xb9\xaf\x80\x00nK\xe91\x1d\xe0\xdb\xbc3\x85D\xec\xc8\x1e\xf1\xa8%\xc6\x8c\xb7\xcfI\x08\x96S\xf22\x95\xfavf\x16x\xc5b\t\x8da\x0f\x03t\xf7\xd8\x9bWh~{D\xdc:t\x05\xcf\x08\x14\xbc\x1aA!\xfe4\xce\x0e\xd5k\xa8b\xa7\x1d\xf4\x85\xdbx\xd1*|\x17\xf08Q\xf4\xf4L\xae\x1e\xdbM\x9f\xa5/\x18\xa5\x04\x04\xbcw\x12\xe2\xd4\xe6\x01\xac\x82y\xc2t\x99-Y\xfe;\x05\x83x\x92,\xc5k\xbd\xb5\x151\xdeF3".\xee\xae\x979\xf0\xa7\xcbX\xeao\x0f\n\x13\xd4\xaf\x1d\xe5\x80\xf5f\x83!qV"\xdav\xa3\x1b\xfd\t\xa3\x93\xe3!\xb8w\x1a>\xf6\x887\xd9F\xc4<\x9e\x0c\x0fI\xb0\rr\xc6j+\xb5YJ\xcfG,\xed\x1b\x14\x0cV}\x8f\x9b\xa1\x98a\xa7\xff\x9f\xb3\xb29\xeb\x1e\x9d\xba\x1fk\xec\x1f/\x18\xc6-\x06+\x0b\x7f\xb6\xd5\xd7aN\xca\xdc\xbdq\xaa\r{\xfd"\xe7Tq!_\x81\x95<\xd9=Ln'
用type函数得到类型为bytes,用len函数得到长度是256
从数据库中select出来的encrypted_nonce值为:
b'g\xb9\xaf\x80\x00nK\xe91\x1d\xe0\xdb\xbc3\x85D\xec\xc8\x1e\xf1\xa8%\xc6\x8c\xb7\xcfI\x08\x96S\xf22\x95\xfavf\x16x\xc5b\t\x8da\x0f\x03t\xf7\xd8\x9bWh~{D\xdc:t\x05\xcf\x08\x14\xbc\x1aA!\xfe4\xce\x0e\xd5k\xa8b\xa7\x1d\xf4\x85\xdbx\xd1*|\x17\xf08Q\xf4\xf4L\xae\x1e\xdbM\x9f\xa5/\x18\xa5\x04\x04\xbcw\x12\xe2\xd4\xe6\x01\xac\x82y\xc2t\x99-Y\xfe;\x05\x83x\x92,\xc5k\xbd\xb5\x151\xdeF3".\xee\xae\x979\xf0\xa7\xcbX\xeao\x0f\n\x13\xd4\xaf\x1d\xe5\x80\xf5f\x83!qV"\xdav\xa3\x1b\xfd\t\xa3\x93\xe3!\xb8w\x1a>\xf6\x887\xd9F\xc4<\x9e\x0c\x0fI\xb0\rr\xc6j+\xb5YJ\xcfG,\xed\x1b\x14\x0cV}\x8f\x9b\xa1\x98a\xa7\xff\x9f\xb3\xb29\xeb\x1e\x9d\xba\x1fk\xec\x1f/\x18\xc6-\x06+\x0b\x7f\xb6\xd5\xd7aN\xca\xdc\xbdq\xaa\r{\xfd"\xe7Tq!_\x81\x95<\xd9=Ln'
用type函数得到类型为str,用len函数得到长度是729
然后我试图用encode函数来讲str转化为bytes,这是转化结果
可以看到它讲反斜杠给转义了,并且用len函数打印其长度,还是729
怎么解决这个问题呢