将二进制文件转换为字符串,然后再次使用python返回

2024-05-13 05:13:56 发布

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

我有一个字符串rsastring,它表示一些二进制数据。它包含以下内容:

b'N(\xc8.\xd3\x1eG\xaa\xe1\xbc\xd5\x95p\x03\\\x043\x8f\x03\xad\xc6\xc5\xd9z\x19.\xf0\x9c\x07R\xaf12\xb9;\xb1w\xc1Q\x8fd\x85\x92\x8e<eZ\xf1\xa2Y\x9c\x82.\x9ay\xe8j\xa6\x1d9\x8d\xb3\xc0\xd4x>$\xc5x\xa74\x94\xbf\t\x87f\xca\xb5\t\xeb\xeb\xb5\xff\xde{TC\x05\t\x88\xbcP\x0cN\xd0\xc8\xfd\xe2\xa4\xc1f]\xec\xb9y\x0f,\xfe\xcfk\xd9\xd0\xa2\xc3p\x15\xd8w\xa0\x98\xc0A\xe6\xcfeq\x8e\xf2b\x915y.\xdc\xfa\x1b\x92\xe2.C\xb7\xef\xccxT\xd6!\xf7\xc79U\xe4\xd8\x12\x9b\xda\xfcv\x19k\xef\x9dHD\xa1\xea\x92\x14\xc4h\x06\x0b\x12!\x06\xff=\xde\xf3\xaa\x83#\x01\x96)8\xc9Q\xbb\xcfX\x14\xdfc\x98n.I\x0ef\xb8<\xb0\x99(\x8c2\xff\x97Uw\xe6\xc8\xab\xa3H\xbf\x10\xf4\xa3h/\xa3$\xe2kOgR\xeb\xc6\xf4\x94\xa0\x1c\xbf\xe4\x96dX\xbd\xa8\x0e\x801\xa7\xc8\xa6\t\xe2\xb3\x07\xe2\x80\xf3\xc3\xb7k\xce\xbcu\x1e\xac\xbc\x99\xce\x89e;\x0cB{.\xc1\xa2Ki\x8c\x19\x94\x16\xe3RV\xc7*t\xac\xe9}\xce\xb7_\xd2\xd5pg\x8a}\xa6\x00\x81\xe4&\xce\xe5SK2\x1d\xc1\x8efu\xa0:QqqbR\x84\xff\xd5\xca\\L\xd7\x02\xa3\x1fy\xff\xfdm\xf6@\xa5\xea\xdee\x04\x1e5m\x8eq\x1cy\x04\t\xdf\x94\xff\x1a\x99Y\xad!u\xf2.\xac<\x12\xb7\x83V\x13?\x91\xd8\xd1c@BP\x90"\xf5&\xa6\xbd\x10F\x1d\x85\xdb\x94u\xd2\xfc\x85\x01|\xe5\xc4\xe5U\xe6d\xad$\x94WH\xdf\xed\x9d\xa1J\xe2\xd9\xa78z\x19\x91$\x04\xabi\xc9\x17x\xa48(y\x12C\xbe}\xbb2s,\x88\xe8\xaa\xea\xd3z,\x93\xaf\xe5\xdbf\xaatk\xdeV3,R4(\t\xc3Y\xf7\x12\x82\xaa\x07\x0f\xfc\xc7\xcfk\xe6\x0ec^OO|\xf2\xe1[.\x93S]\xa8d\x12\xf1\xab\x80\x9c?\xd6s\xbe\xf2~\x98\x1f\xc7E6\x97\nTyl\xf7LP'

基本上,它是来自RSA加密机的密文,我现在要解密它。但是,加密程序需要二进制数据,上面的blob实际上读取为字符串:

print("TYPE: " + str(type(rsastring)))
TYPE: <class 'str'>

rsastring首先是由str(somebinarydatafromrsaencryptor)生成的,所以我认为各种形式的encode()decode('utf-8')等都会起作用,但它们似乎只会进一步转义字符串中的控制字符

如何将rsastring转换为实际的二进制数据,以便将其传递给我的加密程序?我错过了什么?


编辑:用这个问题解决“XY Problem

上述案例源自以下思考过程:

  1. 生成一些二进制数据以便通过套接字发送:theBinData = someFunctionThatProducesRsaCiphertext()
  2. 在二进制数据前面加上标记,以便在服务器端识别: outBuffer = "TAGNAME " + str(theBinData)
  3. 它随后被推入套接字:socket.send(str.encode(outBuffer))
  4. 在服务器端接收到标签后,客户机处理程序会剥离标签,并将其发送给一个应该解密密码文本的函数。但是,我需要以某种方式将rsastringblob转换为实际的二进制文件。我相信我可能会以错误的方式发送这个rsa加密字符串

根据@metatoaster的评论,这里是print(repr(rsastring))

TYPE: <class 'str'>
'b\'\\x14\\xad\\xdd\\xedEmP<\\x8c\\xbe\\xfc\\x1a:cE\\xbb\\xcaa\\xee-S\\x17\\x85\\xefV\\x9c\\xc2e\\x15\\xeeJ\\x88\\xc3x"\\x1a\\xe2\\xca\\xa8\\x0e\\xcf\\x87T\\x07\\x95\\x06\\x1b8g\\xce\\xd8F\\x89\\x82\\\'mi\\xc9\\xfb\\xed\\xb9\\xd5\\xbd\\x89dY\\xa4\\xbb\\xed\\xa88~t-\\xcd\\xf9\\xd5\\x8a\\xdd\\xf7R|\\x82-\\x04n\\xb4p\\xc9\\x8eE3\\xc0\\xaf\\r\\x0c\\xf4\\xef\\xa031\\xc5P\\x89~\\x1f\\x98\\x06R\\x8e7\\x9d\\xc1\\xa7&\\xcfG\\xf2 \\x8f%x\\xdbM\\x0f\\x93X\\x0ekm\\xe7\\xcfJ\\x04(\\xb6\\x89.\\x93\\xb3\\xf7\\xfe\\xec\\x02\\xa2\\xfdg\\x06\\xf1z\\xcf`\\xab\\xea\\xf34\\xea\\x02#E\\x94\\xf21t\\x05y\\xb9\\x0b\\xc3\\x1b\\xf6V\\x00\\x9d5a~\\x05R\\xeez<\\xefN\\x9a#\\xa8\\xc6\\xebq\\x02\\xfc\\xea\\x98\\x98\\xb0a\\xdf\\xa1N+\\x15\\x1a\\xe9Z\\xd8\\xaf\\xc0\\x7f5\\xe3\\x08\\xf9\\n\\xee{Y\\x04uZ\\x16S\\xcfM\\x08T\\x95L"\\xed\\x1d9Y\\n\\x85\\xa6\\xe5|\\x8d{$b\\xf9J\\xc5#f\\x04\\xea\\xeb#p\\x96P\\xb9_\\\\\\xa6J\\xcc\\xd6\\x1f\\xfcP\\x84h:\\x08d\\x9e\\xf4F-CA\\xb6\\x81:Ym\\xb5\\xb7}\\xeex\\xfb\\xa47\\xc5\\xe90\\xa7{\\x13\\xee\\x11:\\xaf)Y\\xa1\\x01\\xa7\\x80A]\\xf2\\x83\\xd9\\x9c\\xca\\xe7;\\x91e\\xf7\\xe9\\x10\\xbe!\\xd7\\x1e\\xd7a#\\\'\\xaf`\\x81\\xe3Q\\xc5y\\xc2\\xb3\\x807\\xc6\\xd3\\xd8B\\x93\\xd9\\x026\\xc9\\x8ePY\\xacej\\xbc?\\xa1Y\\x057I:\\x94\\xd6\\xa9\\xe5Y.\\xee\\xe1\\xbft{\\xdey:!\\x9d\\xe1IJ\\x0c\\x1dr\\xb2\\x99\\x11pNa\\x003\\xf2Z2\\xf7\\xcbF\\xd6\\x9b\\xd6\\x1a\\x92\\x82D\\x8b|2\\xc6\\x9d\\xf3\\xf0\\xdal$3\\xd5\\x8d\\x96\\xbaz\\x94t\\xa4\\xab-\\x1a\\xf4\\x11GS\\x85o\\xe2GN\\xd6\\xa0\\xf5\\x9d\\x0b\\x95\\x15\\x0e\\x03\\xc0\\x83M\\xe6\\xd8N\\xa9\\xc6\\xa3:k\\xe5\\xf6\\xb8\\xe7\\xf7\\x00\\xabH|IN\\xbf0(\\x14i\\xbb\\xe3\\xfe\\xb9\\xca\\xeb\\xae|\\xb3\\xde\\xc5\\xc5\\xaf\\x11O\\xe0l\\xf9$\\xfa5{\\xea\\x9aCI\\xd0r{\\xb5P\\x95\\x0b\\xaa\\xe5\\xd1\\xb8\\xf3\\x05\\xf5\\x8b\\x97\''

Tags: 数据二进制xe2xffstrxafx1axd5
1条回答
网友
1楼 · 发布于 2024-05-13 05:13:56

您可以使用binary_data = ast.literal_eval(rsastring)。这将把二进制数据分配给名为binary_data的变量

不要对您的数据调用execeval!数据可能不安全,将不安全的数据传递给execeval是不安全的。只有ast.literal_eval是安全的

相关问题 更多 >