要使用RSA私钥加密、公钥解密,需要借助`cryptography`库。以下是示例代码: ```python from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives.asymmetric import rsa, padding from cryptography.hazmat.primitives import serialization, hashes from cryptography.hazmat.primitives.serialization import load_pem_private_key, load_pem_public_key # 私钥字符串 private_key_str = """ -----BEGIN RSA PRIVATE KEY----- MIIJKQIBAAKCAgEAw0WN6KLMr/mC/GC9Ho4d2PiH0T34l9OaNZFxdYqCvhZvgD59 AQF8VSXCE1yQxhvuSnWm7yngWLd2KGY/Zn1IC9AQAP75vJI0YXrCVAvKCFy+kxBg 7w57E772K2mmvcxqMbKRorZFJigidWalnmyCZ/uT6AUmYDBwqsVxexAvkDiI1S 3KafUJXP2UokFu5VwWl+O3v0ALU1xQNREE4b629T09pPB/i+m2CNjb0Ki6K5vB1X s4PBc4JU2S5pY+4Q05NQqEcbPu0ZDHQPkKy4+vsJseX77/S+UHYnt13lYVUtz6pa d6Xkr7lFBG1PdoX8eIYW1V2WpTRDS4C++SUQtvBrW5L0ONx+CGOA3tnt+A0tfClF VrOr2YZeA62YpfE5cWVOVyvcY8RER5Vm/ZyPxAx+rLhsf3bLB/xqxQveSuBVGLph Obhlenmh5QGTQovUYztRlGgBbGdQdG3m5M1pg3tyTLhL5U0FAa9bbgBSe8lMZNJp fLMsgFCj9d0CEqd0CcH9poP01u1PVp4Dvy7EE7s5XAjvzg0cilUVsLP0nHA9ZGNb MIB91ngv9tRo0oulCNDO231KVSkH9kb5JNDg/N67MLQISDoGcqt8dfdPw7iJrwhC Ai164A7aT+hFAcmE+RAG9evy7isT52equ9ZM/cz6S3T3F62oGlrdmQCrZ28CAwEA AQKCAgEAkEIyNEsRLHAIdKqDDK+xHTl+HPbLUF7i7fAlAdDyBbxNY1DGyJdwYvci CWu5CKJZyGhiiw1E0EW45N+ktvKW5yMur42uscDRMbKfHbgX6VWa9MqE0hbAljXd ZvUGWfFKAq09RCAxLkwuujiVfrwr4nGOqiuiYT07v1gDOdQm0StlkNvW+2udBsum YcCEKOyqLdjhiNBp0pwMvR9WI9WQir4UD86X1CvPpLoP2UZvI/lzfaWvxM7xe4Qt asT+1vRpOeT7EVZ2qmY+uxSC6z6u6bvLzcE5/muwrYCclrqnWuCyl1givYGxEKCu fDbFHaqeeeuVsssRH7scfAsBCs53KWL0Rx3szUaIf8l1RxvD0a9Vc10/4hThpBUm lVZMEHUAOvG0H5N1DgcQY13RYcBOtGFMXEAu/d8TaxWEwhIiTqHVA+lW/r73pbeH NKPNDZW7t8bmodjhl6nEI+4Z8rjUXad0lKtwsPGLT92mbD+m0Scjal7ED78pq1Jz T5y2ad/DDs7QTfDvAIamlp31XE7/bDqorkdCacKXEuedvqZ/TODiSWKBHyfgM5y8 lvmk+S7ll9opXPYqAr9+4zS3seRBW08jmMWg5n5YEP8v3DQOBG2A75zpAMxjstwz eXTH/70ZYTa1VUF6iFKvVXqBBm2OQYF8IOAbCm3JQK9p5PI9KAECggEBAPjZ0msR muGmY2ljUg35HScQIYZoO6mk1k9Sa5o5vu9BDnjJJwJHVk+dnDHxy7kN8yyYA0O7 im5tQfjpESuExPRAB2pLcMuaHgbF4+xs1Ti8WaLDUqlUI5AdnHDLLjD+2MCa51 CGCdW0ZEplJSxl5h+8++B1okTsE8VVWcWAuuOYf/Mx8nOCFcEchnYmj7F28Nv6ON 6IhzUnEGTVwwts05r0yOHPh1hOywwFRP9MxIcQpgTTTNQL8X8TPZrzV6bpkupuD9 DXNs5jd4xjs8+K7LvNqOxM7UoGIxTzJTFaylMKvy3KbsOTNYPzx60KSzKCwB/vvc Vvpk/KQIbPK9D2ECggEBAMjhrvXdpq0QdlocG9mamafPrUa3i/SE70xO4Vsarc/3 y2UUlB6k8xS5DqJKY7WRGo+yOQpfwFZGtWKDcGni6OHpNuJNEhKTq2KMPx70a8l8 IfJo0TquuEiVwOGKMl3GaclJj4RP3DweNaz9WP2XZHdT5gmzKjSwUr5zHyzX53+d +Wq6cwx/MDHFbhhhriKHh7/2Q/08ac5ti9I0v4jYGT3r9w1FMx/O+8bM8NdtB0QF a0bZMuriTIm9E4WyzEJMq6ATsAPOl4BjqW7DwM2dvwxrutyF5/rMJ09ltzvxpQWP lzzfwKhDZeGcpmy3yBeamdFfqugfGKNA1wb6Sdqm+M8CggEAX4gHblEA21Vr3n5h drnGhkN8C0Qie1qrZyIl6rv2X5TjAF2AWzCVotTHrKi9Y5pGWz00K6FoYEITTIH0 tHcwwO9/qT+y2oactk7r08xoAnLUGlbPee+yA1ZKw0ZMwkRkbMzMfquw/p4J9yzN iNb8DimhaLvzyJgdn7MQs1/ksP8+WMYQkwoUU0IsFXoS3mheM6Tch+YneZKD+J3J vvV4h8p4UHRSDNPYpqCoBPX47R92PdyAZx/QlkuTrisIRwhsQuQU7lRXAJOywWLc /srGURwnsOOUDC62L1vsok4hCPkVeT0vlekjgGGFTSt8w21/o31UrM2GmnOARVxy rrEDoQKCAQA+R/J12i3WFHeNQo/D7LHdHH9toHSs8BY9Q2uNUn03MG2IPlQaGCwh barC2GuHnKBukuQqejtoxG1ySKwuuCJaAHN6wEhtKAmH+VGMqF1Oz8S6opLULd2G 658sjitFdcHQnZT4gcYXgYpEwxu3LBwC/ykgMsNQKKbO02SEA8CLiZAN7hbDdh+c HskemBJkND77XkAAIJ3xWXdzSdVkeROCZklnfN/36bWYEmxNbklFZqS3B5pIxrbS MaP+3MuFdr3zWIdG9uNz8/JRHDIHzfOwxyndO0sMMAW0ESY5WJdAXR+XyQuzX4oT 4/yZUnWgE9fC2XVkmFeMLgs855bESuZzAoIBAQD2q/LEHSL1dMSd2OVmzePi72rV TDVsL4L8kJkaaM/8m -----END RSA PRIVATE KEY----- """ # 加载私钥 private_key = load_pem_private_key(private_key_str.encode(), password=None, backend=default_backend()) # 从私钥中提取公钥 public_key = private_key.public_key() # 待加密的明文 plaintext = b"Hello, World!" # 使用私钥进行加密 encrypted = private_key.sign( plaintext, padding.PSS( mgf=padding.MGF1(hashes.SHA256()), salt_length=padding.PSS.MAX_LENGTH ), hashes.SHA256() ) # 使用公钥进行解密 decrypted = public_key.verify( encrypted, plaintext, padding.PSS( mgf=padding.MGF1(hashes.SHA256()), salt_length=padding.PSS.MAX_LENGTH ), hashes.SHA256() ) print("解密后的明文:", decrypted.decode()) # 十六进制密文(题目提供的) hex_ciphertext = "0a6e38ab9c81c5ec00a8a10577279f00141c1a75bae971ed95c8f2cf3c750c0171a29e6baf5832e3da01dcea1fe6c1812d1411c88df736ba7df0199b4362d40e64fd0771f96deeacb9d522f2443bd6df51b2121cd089a24cc016ebdfced42301e5fb7c8e457f311ba189ee282ea1816920c8c2a7490a67ba7d6ca222fea59977585cb13964aadf8fb1283564b6b75b71c76c237a3f636ac633fcda45d5a70ecfa6cdd45ee5c80627ef1dd2b14078dee57e238d28865b1cc49b2df7c2e7066749194da2334e4b8117fb5bedbb31b87a967436c7d24e6ac3ab3c53fc34cebaf8ce2eed46293167ce0184d066928477555c94f20114fb63ae689f23b50969f8c2ce10e988160fe03e0746703051a6c9fe7ef6c051907bc0b92dbb9fd8d7724a7159bdb8115382f0494abb1b1e82a939c7ff972034a4b8096eedf31041fbf6f1966394c5d3806968fc3f24e0c4f5e8d2f9e92a31cb0caf10cc05dedb9eddb961047f8c49280b74211986461ee26c8a8e7748baf2e8a2db3d1b34a6a011d1b9383e439b171c74705f960f6fd7594827cf0cce8e74fcd8a57632d1379cd2ed9f71539a142a923497fb7aabeb4f354c1eb1f1701805b2f27d986c1ac7ca92d9f1958cc88bef69c9f513e0328e6cf5860b6c7811c37ac3fb50acde12bbe28596bc20fbca324761b2d488856b78844b19776ef8923b55582580478bbcf241f9242c5f3784" # 将十六进制密文转换为字节 ciphertext_bytes = bytes.fromhex(hex_ciphertext) # 使用公钥解密 decrypted_bytes = public_key.decrypt( ciphertext_bytes, padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None ) ) print("解密后的字符串:", decrypted_bytes.decode()) ``` 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: 1. 密钥的格式和编码要正确,私钥和公钥的加载过程中要确保格式无误,否则会导致加载失败。 2. 加密和解密时使用的填充方式和哈希算法要一致,否则解密会失败。 3. 对于十六进制密文,要确保正确地将其转换为字节类型,否则无法进行解密操作。 [2025-08-28 20:48:04 | AI写代码神器 | 3549点数解答]