它总结了爬行动物常见的各种加密算法、加密算法原理以及在JavaScript和Python中的基本实现方法,可以在遇到JS加密时快速恢复加密过程。 有些网站在加密过程中还会进行其他处理,但大致方法是一样的。 常用加密算法:
对称加密(加密解密密钥相同) DES、3DES、AES、RC4、Rabbit非对称加密)区分公钥和私钥) RSA、DSA、ECC消息摘要算法/签名算法) MD5、SHA
JavaScript解密模块Crypto-JSCrypto-JS是MD5、SHA、RIPEMD-160、HMAC、PBKDF2、AES、DES、DES (三重DES )、Rabbit、Rabbit
Crypto-JS文件: https://crypto js.git book.io/docs/crypto-js github:https://github.com/brix/crypto-js node-RSA
参考资料: node-RSA github:https://github.com/rz coder/node-RSA
JSEncrypt参考: JSEncrypt对RSA算法的支持更全面,并且是使用命令npm install jsencrypt安装的。
JSEncrypt文档: http://travistidwell.com/js encrypt/jsencryptgithub:https://github.com/travist/jsencryptpython加密解密程序Cryptodome几乎是Crypto的替代品,因为Crypto已停止多年的更新,并且存在许多未知错误,因此不推荐安装crypto dome。crypto dome包括MD5、SHA、BLAKE2b和Blake 3它支持几乎所有主要的加密算法,包括三重3DES(Triple DES )、ECC、RSA和RC4。 Cryptodome使用命令pip install pyCryptodome安装,crypto使用命令pip install pycrypto安装。 参考资料:
Crypto库: https://www.dl itz.net/software/py crypto/crypto dome库: https://www.pycryptodome.org/en/latest/hatest
hashlib库: https://docs.python.org/3/library/hash lib.html廖雪峰hash lib:https://www.Liao Xuefeng.com/wiki/1016910161699100
hmac库: https://docs.python.org/3/library/hmac.html廖雪峰hmac:https://www.Liao Xuefeng.com/wiki/10169563602400
参考资料: pyDes库: https://github.com/twhiteman/py des
ESAPython的第三方库rsa支持rsa算法。 使用命令pip install rsa进行安装。 参考资料: rsa库: https://stuvel.eu/python-rsa-doc/
加密解密的基本参数在一些对称和不对称加密算法中,经常使用三个参数:初始向量iv、加密模式mode和填充方法padding。 首先介绍这三个参数的含义和作用。
初始向量iv在密码学中被称为初始向量( initialization vector,简称iv ),并且与密钥结合使用( starting variable,简称sv )。 作为加密数据的手段,是固定长度的值,iv的长度依赖于加密方法,通常与所使用的加密密钥或加密块一起利用,通常要求为随机数或伪随机数,从而通过利用由随机数生成的初始向量来实现语义安全,攻击者可以利用这种加密方法
参考资料: Wikipedia:3359 en.Wikipedia.org/wiki/initial ization _ vector
加密模式mode目前流行的加密和数字认证算法,采用的是将需要加密的明文划分为固定大小的数据块,并对其运行加密算法以获得密文的分块加密方式。 数据块的大小通常等于键的长度。 加密模式是基于加密算法发展的,并且可以独立于加密算法存在。 加密模式通过重用加密算法定义了将大于一个数据块大小的明文转换为密文的方法,描述了加密每个数据块的过程。 目前使用较多的加密模式包括以下几种:
ECB:Electronic Code Book (电子码本模式)以基本加密方式,将密文分割为组长相等的块,分别加密,逐一输出构成密文。 CBC:Cipher Block Chaining (密码块链接模式)是操作前一组密文和当前组明文的异或后进行加密的循环模式,以提高解密难度为目的。 PBC:propagatingcipherblockchaining (也称为加密块链接模式),是密文的微小变更在解密时导致明文的大部分错误的模式加密时也具有同样特性的CFB:Cipher Feedback (密码反馈模式)可以将块密码变为自同步流密码。 与CBC相似。 CFB的解密过程是一个几乎逆转的CBC加密过程。 ofb )输出反馈)可以使块密码成为同步流密码。 块密码生成秘密密钥流的块,与明文块进行异或得到密文。 与其他流密码一样,如果密文的一个位反转,明文中相同位置的位也会反转。 计数器模式也称为ICM模式( ICM模式)整数计数模式( SIC模式),在CTR模式中安全可靠,还可以并行加密,但如果计算机不能长期维持,密钥只能使用一次。 参考资料: Wikipedia:3359 en.Wikipedia.org/wiki/block _ cipher _ mode _ of _ operation
填充方法padding块密码只处理特定长度的数据块。 消息的长度通常是可变的。 因此,某些模式中最后一个块的数据必须在加密之前输入。 有几种填充方法,最简单的方法之一是在明文的末尾填充空白字符,使其长度为块长度的整数倍。 常见的填充方法如下。
PKCS7 )在填充时,首先获取要填充的字节长度=块长度- (数据长度%块长度),并将填充字节序列的所有字节填充为要填充的字节长度值。 PKCS5:PKCS5作为PKCS7的子集算法,在概念上没有区别。 但是,blockSize将块大小固定为8字节,即8字节。 ZeroPadding :在填充时,首先获得要填充的字节长度=块长度- (数据长度%块长度),并将0填充到填充字节序列的所有字节中。 ISO10126 )在填充时,首先获取要填充的字节长度=块长度- (数据长度(块长度) ),将要填充的字节长度的值嵌入到填充字节序列的最后一个字节中,且随机地填充每个填充字节的剩馀字节ANSIX923 )在填充时首先获得要填充的字节长度=块长度- (数据长度(块长度) ),并将要填充的字节长度的值嵌入到填充字节序列的最后一个字节中,并将数字零嵌入到剩馀的填充字节中参考资料:
维基百科: 3359 en.Wikipedia.org/wiki/padding _ ( cryptography ) PKCS7/PKCS5文件算法: https://segment fault.com/a
Base64百度百科: https://baike.Baidu.com/item/base 64/8545775 base 64 Wikipedia:3359 en.Wikipedia.org/wiki/base 64 javascrs crypto-js加密模块varcryptojs=require(crypto-js ) ) function base64 encode ( var srcs=crypto js.enc.utf8.parse ) ) returnencodedata } function base64 decode ( ) var srcs=crypto js.enc.base64.parse ) encodedata ); vardecodedata=srcs.tostring ( crypto js.enc.utf8 ); returndecodedata } vartext=’ I love python!’ var encodeData=//Base64Encode ( ) var decodeData=base64Decode ) ( console.log )、encodeData ) console.log )、base64 console ) ) Python是import base64 def base 64 _ encode ( text ):encode_data=base64.b64encode ) text.encode ) )的return code_data ) return decode _ dataif _ _ name _=’ _ _ main _ ‘:teecode _ dataif _ _=encode _ data=basesed 代码:’,encode decode_data ) # Base64解码: b’SSBsb3ZlIFB5dGhvbiE=’# Base64解码: b’I love Python!’ MD5概述:全名MD5消息摘要算法(英文名: MD5 Message-Digest Algorithm ),也称为散列算法、散列算法,由美国密码学家罗纳德李韦斯特( Ronald
摘要算法是单向加密的。 也就是说,明文被摘要算法加密后无法解密。 摘要算法的第二特征密文为固定长度,通过函数将任意长度的数据转换成固定长度的数据串(通常用十六进制字符串表示)。
称为摘要算法是一种提取明文重要特征的算法。 因此,两个不同的明文在使用概括算法后,他们的密文可能是相同的,但概率非常低。 参考资料:
RFC 1321:3359 data tracker.IETF.org/doc/RFC 1321/m D5 Wikipedia.org/wiki/m D5 JavaScript实现/crypto-js加密模块varcrc ‘ returncryptojs.MD5(text ).toString ) }console.log ) MD5test )/21169 ee3ACD 4a 24 E1 fcb 4322 CFD9a2b8python实现import .encode(utf-8 ) ) print ) MD5.hexdigest ) ) def md5_test2):MD5=MD5 print ) MD5.hexdigest ) ) if_name_==’__main_’:MD5_test1 ) ) 2111111 2169 ee3ACD 4a 24 E1 fcb 4322 CFD9a2b 8 PBKdf2是RSA研究所公钥加密标准( PKCS )系列的一部分,2017年发表的PBKdf2以伪随机函数(例如HMAC )为明文和一个盐( salt )为输入参数进行反复运算,最终生成密钥如果重复次数足够大,解密的成本就会很高。 参考资料:
RFC 8018:https://data tracker.IETF.org/doc/RFC 8018/pbk df2Wikipedia.org/wiki/pbk df2JavaScript实现/crypto-js加密模块请参阅var salt=’43215678′ //key长度128,10次重复运算varencrypteddata=crypto js.pbk df2 ( text,salt,{keySize: 128/32, iteration returnencrypteddata.tostring ( } console.log ( pbk df2encrypt ) )/7 fee 6e 8350 cfe 96314 c 76 AAA 6e 853 a 50 python为importbinasciifromcryptodome.hashimportsha1fromcryptodome.protocol.kdfimportpbbbkdf BKdf2(text,salt,count=10, hmac _ hash _ module=sha1 ( result=bin ascii.hexlify ( result ) print ) result ) # b ‘7fee 6e 8350 cfe 96314 c 76 AAA 6e 853 a 50 主要适用于数字签名标准( Digital Signature Standard DSS )中所定义的数字签名算法( Digital Signature Algorithm DSA )。 SHA通常指SHA家族的五种算法。 分别为SHA-1、SHA-224、SHA-256、SHA-384、SHA-512,后者的4个有时也统称为SHA-2,SHA是比MD5更安全的概括算法,MD5的密文为330~512
RFC 3174:3359 data tracker.IETF.org/doc/RFC 3174/sha Wikipedia.org/wiki/secure _ hash _ algorities crypto-js加密请参阅returncryptojs.sha1(text ).toString ); }console.log(sha1encrypt((/23c 02 b 203 bd2e 2ca 19 da 911 f1 d 270 a 06 d 86719 FB python实现import hashlibdef sha1_test1 ) ):shaabdefsha1 .encode(utf-8 ) ) ) prprod=hashlib.sha1 ) ) sha1.update ) ) I .encode(utf-8 ) ) print ) sha1.hexdigest ) ) if _ name _=’ _ _ maid 19FBhmac简介:全名散列消息认证码、密钥相关散列运算消息认证码(英文名称: hash-basedmessageauthenticationcode或Keyed-hashmesssage
HMAC加密算法是基于安全加密散列函数和共享密钥的消息认证协议,要求通信双方对密钥key、约定算法和消息进行散列运算,形成固定长度的认证码。 通信双方通过对认证码的检查来确定消息的合法性。 参考资料:
RFC 2104:3359 data tracker.IETF.org/doc/RFC 2104/hmac wiki/hmac JavaScript实现/crypto-js加密模块varto-js加密模块请参阅varkey=’ secret ‘ returncryptojs.hmac MD5 ( text,key ).toString ); //returncryptojs.hmacsha1(text,key ).toString ); //returncryptojs.hmac sha 256 ( text,key ).toString ); }console.log(HMACencrypt ) ) Python是import hmacdef hmac_test1 ) ):message=b’I love python! ‘ key=b’secret’MD5=hmac.new(key,message, digestmod=’MD5 ‘ ) print(MD5.hexdigest ( ) def hmac_test2):key=’ secret ‘.encode ‘ ‘ utf8 ‘ ) sha1=hmac.enac.end c50096; 2d 8449 a 4292 D4 bbee d99 ce 9e a 570880 D6 e 19b 61 ades简介:全名数据加密标准(简称“数据加密标准”)是一种对称加密算法,它对加密和解密使用相同的密钥。 1977年被美国联邦政府国家标准局规定为联邦数据处理标准( findard )的DES是数据包加密算法,使用56位密钥。 通常认为密钥为64位,但实际上有效位只有56位,因为为密钥的每个第8位设置了奇偶校验位。 由于56位密钥长度相对较短,因此DES不安全,现在基本上已被更高级的加密标准AES所代替。
模式支持: CBC、CFB、CTR、CTRGladman、ECB、OFB等。 padding支持: ZeroPadding、NoPadding、AnsiX923、Iso10126、Iso97971、Pkcs7等。 参考资料:
RFC 4772:https://data tracker.IETF.org/doc/RFC 4772/des Wikipedia.org/wiki/data _ encryption _ sta acker crypto-js加密模块varcryptojs=require(crypto-js ) ( function desEncrypt ) ) { varkey=crypto } s.enc.utf8.parse(desiv )、srcs=crypto js.enc.utf8.parse ( text )、//CBC加密模式、Pkcs7填充方式encrypted=={ iv: iv return encrypted.toString (; } functiondesdecrypt ( ( varkey=crypto js.enc.utf8.parse ) deskey )、iv=cryptojs.enc.utf8.parse )、 desiv ) )、crypto js.enc.utf8.parse 652 pkcs 7填充方式decrypted=crypto js.des.decrypt ( srcs,key,{ iv: iv,mode:crypte ) }var text=’I love Python!’ //要加密的var desKey=’6f726c64f2c2057′ //密钥var desIv=’0123456789ABCDEF’ //初始矢量var encryptedData=desEncrypt ) ) var desiv encryptedData ) console.log )、解密字符串)、decryptedData ) /加密字符串)、ndbEkWNw2QAfIYQtwC14w==//解密字符串Python为import binascii# 填充方式为PAD_PKCS5from pyDes import des,CBC,pad_pkcs5defdes_encrypt(key,text,iv ):k pad mode=pad _ pkcs5( en=k padmode=pad_pkcs5) returnbinAscii.B2A_HEX ) en ) def des _ decrypt pad mode=pad _ pkcs5( de=k.decrypt ) padmode=pad_pkcs5) returndeif_name_ ( ) ) ) ) #加密对象iv=secret_key #偏移secret _ str=des _ ename _ ) ) secret_str,iv ) print (解密字符串:(,clear_str ) #加密字符串: b ‘ 302 D3 abf 2421169239 f 829 b 38 a 9545 f1’ #解密字符串: b ‘ I love pytr ) )。 3DES概述:全名三重数据加密算法(英文名称: Triple Data Encryption Standard、Triple Data Encryption Algorithm、TDES、TDEA )、对称加密算法的70年代初由IBM开发,1977年被美国国家标准局采用为数据加密标准。 这相当于对每个数据块应用三次DES加密算法。 由于提高了计算机的运算能力,原始DES密码的密钥长度更容易被暴力破解。严格说来,3DES是一种全新的分块加密算法,因为3DES的设计提供了通过增加DES的密钥长度来避免解密的相对简单的方法
模式支持: CBC、CFB、CTR、CTRGladman、ECB、OFB等。 padding支持: ZeroPadding、NoPadding、AnsiX923、Iso10126、Iso97971、Pkcs7等。 参考资料:
RFC 1851:3359 data tracker.IETF.org/doc/RFC 1851/3 des Wikipedia.org/wiki/triple_desJavaScript实现crypto-js加密模块varcryptojs=require(crypto-js ) ) function triple desencrypt { varkey=crypto } 引用的iv=crypto js.enc.utf8.parse ( desiv )、srcs=cryptojs.enc.utf8.parse )、//ECB加密方法、Iso10126填充方法加密密钥return encrypted.toString (; } functiontripledesdecrypt ( ( varkey=crypto js.enc.utf8.parse ), iv=cryptojs.enc.utf8.parse ) desiiise Iso10126填充方式decrypted=crypto js.triple des.decrypt ( srcs,key,{ iv: iv,iv } ) return decrypted.tostring ( crypto js.enc.utf8; }var text=’I love Python!’ //要加密的var desKey=’6f726c64f2c2057c’ //密钥var desIv=’0123456789ABCDEF’ //偏移varencrypteddata=triple desencrypt ( ) ) ) ) ) ) ) ) ) vardecrypteddata=triple des decrypt ( ) console.led ) Python要实现fromcryptodome.cipherimportdes3fromcryptodomeimportrandom #需要补充,并且如果str不是16的倍数,则需要补充16的倍数defadd_to_16(value ) 0’returnstr.encode(value ) def des _ encrypt ( key,text,iv ) #加密模式ofbcipher_encrypt=des3. )。 iv ) encrypted _ text=cipher _ encrypt.encrypt ( text.encode ( utf-8 ) ) ) return encrypted _ textdefdes _ decrypt 加密模式ofbcipher_decrypt=des3.new ) add_to_16(key )、DES3.MODE_OFB、 iv ) decrypted _ text=cipher _ decrypt.decrypt ( text ) return decrypted _ text if _ name _=’ _ main _ ) ) 加密对象iv=Random.new ( ).read ) des3. block _ size==8secret _ str=des _ encrypt ) key,tey iv ) print ) ‘解密字符串:’,clear_str ) #加密字符串: b’_xa5 AES概述:高级加密标准(英文名称),密码为Rijndael 该标准用于代替原来的DES,已经被很多人分析,并在全世界使用。 它本身只有一个用于加密和解密的密钥。
模式支持: CBC、CFB、CTR、CTRGladman、ECB、OFB等。 padding支持: ZeroPadding、NoPadding、AnsiX923、Iso10126、Iso97971、Pkcs7等。 参考资料:
RFC 3268:3359 data tracker.IETF.org/doc/RFC 3268/AES Wikipedia.org/wiki/advanced _ encryption _ encryption crypto-js加密模块varcryptojs=require(crypto-js ) ) function tripleAesEncrypt 引用的iv=crypto js.enc.utf8.parse ( AES iv )、srcs=cryptojs.enc.utf8.parse )、//CBC加密方法、Pkcs7填充方法encrypted=return encrypted.toString (; } functiontripleaesdecrypt ( ( varkey=crypto js.enc.utf8.parse ) AESkey ),iv=cryptojs.enc.UTF8.parse ) AESii Pkcs7填充方式decrypted=crypto js.AES.decrypt ( srcs,key,{ iv: iv,mode: CryptoJS.mode.CBC,padding:crypto js.pad }var text=’I love Python!’ //要加密的var aesKey=’6f726c64f2c2057c’ //密钥、16倍的var aesIv=’0123456789ABCDEF’ //偏移、 16的倍数varencrypteddata=tripleaesencrypt ( ) vardecrypteddata=tripleaesdecrypt ) ) console.log ) ‘加密字符串: ‘,加密数据decryptedData加密字符串: dZL7TLJR786VGvuUvqYGoQ==//解密字符串: I love Python! Python实现import base64 fromcryptodome.cipherimportaes #需要补充,并且如果str不是16的倍数,则需要作为16的倍数的defadd_to_16(value ( ) whilelen ) 0’returnstr.encode(value ) #加密方法defAES_encrypt ) key,t, iv ):AES=AES.new ) add_to_16 add_to_16(iv ) #初始化加密器encrypt_aes=AES.encrypt ) add_to_16 ) t # bytes return encrypted_text#解码方法defAES_decrypt(key,t, iv ):AES=AES.new ) add_ )进行转码后返回的add_to_16(iv ) )加密器base64 _ decrypted=base64.decode bytes ( t.encode ) t=str(AES.decrypt ) base64_decrypted, encoding=’utf-8 ‘ ).replace () ( ) ) )0)进行优先解密”)进行密码解密和转码,并执行strreturn decrypted _ text if _ name ) 加密对象iv=secret_key #初始向量encrypted _ str=AES _ encrypt ( secret _ key,text,iv ) print ) ‘加密字符串:’,encrypted, encrypted_str,iv ) print (解码字符串:’,decrypted_ ),iv )解码字符串RC4的概要:英文名称: Rivest Cipher 4,也称为ARC4或ARCFOUR 加密和解密使用相同的密钥,因此也属于对称加密算法。 RC4是在有线等效加密( WEP )中被采用,曾经在TLS中被采用的算法之一。 该算法的速度达到了DES加密的10倍左右,具有非常高水平的非线性。 虽然软件方面的简单性和速度非常出色,但在RC4中发现了很多漏洞,特别容易受到攻击。 RC4作为旧的验证和加密算法容易受到黑客攻击,目前不推荐参考资料:
RFC 7465:https://data tracker.IETF.org/doc/RFC 7465/RC4 Wikipedia.org/wiki/RC4 JavaScript实现/crypto-js加密模块varcryptojs=require(crypto-js ) ) { returncryptojs.RC4.encrypt ( text ), 引用key } function RC4 decrypt ( ) returncryptojs.RC4.decrypt ( encrypted data,key ).tostring ) cryptojs.enc.UTF8; }var text=’I love Python!’ varkey=’ 6f 726 c 64 f2c 2057 c ‘ varencrypteddata=RC4 encrypt ( ) var decryptedData=RC4Decrypt ) ) console.log )加密字符串: ‘,eencrypted decryptedData ) /加密字符串: U2 fsdgvkx 18 hmm9wwdoeqgpolnxzlg9ryardgnwv//解密字符串: Ilovepytttlg Python是import base64 fromcryptodome.cipherimportarc4de frc4_ encrypt ( key, t(enc=aRC4.new ) key.encode(UTF8 ) ) ) RES=enc.encrypt ( t.encode ) UTF-8 ) ) RES=base64.b64encode t ES=enc.decrypt ) data ) returnresif #要加密的encrypted _ str=RC4 _ encrypt ( secret _ key,text ) print (加密字符串:’,ecret ) encrypted_str(print )解密字符串:’,decrypted_str )加密字符串: b’8tNVu3/U/veJR2KgyBw=’#解密字符串: b’I love Python! ‘拉比特介绍:拉比特加密算法是一种高性能的流密码密码体制,于2003年首次提出。 根据128位密钥和64位初始向量( iv )创建私钥流。 参考资料:
RFC 4503:https://data tracker.IETF.org/doc/RFC 4503/rabbit Wikipedia.org/wiki/rabbit _ ( cipher ) ( Jipher ) ) Jipher crypto-js加密模块varcryptojs=require(crypto-js ) ( function rabbitEncrypt ) ) { returncryptojs.rabbe } functionrabbitdecrypt ( ( returncryptojs.rabbit.decrypted data,key ).tostring ) cryptojs.enc.utf8 ); }var text=’I love Python!’ varkey=’ 6f 726 c 64 f2c 2057 ‘ varencrypteddata=rabbit encrypt ( ) var decryptedData=rabbitDecrypt ) ( console.log ) )加密字符加密数据( console.log )解密字符串:(,decryptedData ) /加密字符串: U2 fsdgvkx1zvchrxlhmg5xw 87 ypwmniblbukuh8///解密字符串: isdgvkx 1 有关在Python中实现的信息,请参见https://asecuritysite.com/encryption/rabbit 2
RSA简介:英文名称: Rivest-Shamir-Adleman由罗纳德李维斯特( Ron Rivest )、阿迪萨摩亚( adisamor )、伦纳德阿德曼( Leonard Adleman )于1977年提出这被认为是目前优秀的公钥方式之一。 RSA是第一个可以同时用于加密和数字签名的算法,可以抵抗迄今为止已知的所有密码攻击。 参考资料:
RSA Wikipedia:https://en.Wikipedia.org/wiki/RSA _ ( crypto system ) JavaScript实现//引用node-rsa加密模块varnodeRSA=require varencrypteddata=pubkey.encrypt ( text,’ base64 ); returnencrypteddata } functionrsadecrypt ( ) prikey=newnodeRSA ) privatekey,’ pkcs8-private ‘ ); vardecrypteddata=prikey.decrypt (加密dat
a, ‘utf8’); return decryptedData}var key = new NodeRSA({b: 512}); //生成512位秘钥var publicKey = key.exportKey(‘pkcs8-public’); //导出公钥var privatekey = key.exportKey(‘pkcs8-private’); //导出私钥var text = “I love Python!”var encryptedData = rsaEncrypt()var decryptedData = rsaDecrypt()console.log(“公钥:\n”, publicKey)console.log(“私钥:\n”, privatekey)console.log(“加密字符串: “, encryptedData)console.log(“解密字符串: “, decryptedData)/*公钥: —–BEGIN PUBLIC KEY—–MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOV1BwTJSVce/QjJAro5fXG9WzOpal09Qtv1yuXKE81vZSNTHxW6dICwPT/kjCfC3bA5Qs6wnYBANuwD6wlAS0UCAwEAAQ==—–END PUBLIC KEY—–私钥: —–BEGIN PRIVATE KEY—–MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEA5XUHBMlJVx79CMkCujl9cb1bM6lqXT1C2/XK5coTzW9lI1MfFbp0gLA9P+SMJ8LdsDlCzrCdgEA27APrCUBLRQIDAQABAkAiXwJbJC+5PioXG80tyhjRZdT4iyMkrl2KpoKO9f1iLaBXLyaD0HW82wFh+cUy8GcMl9jse8DE8wd1TdORmHhAiEA/rwmWjXHVgDqcH/fqk8Ufku0fXvs56h5QDoh1so5vokCIQDmmL3JDW6Y7RuK2qwFbHBZtYPRFRVdn5X1oqU2FOSX3QIhAOVTjVN5RtNuT6Cn/jvcpZ5tmTe+8TA8w6vGqeAsfn/BAiBvKKIUEQ2HWoU0YkUaODPQiteIKomqIAvB5S2O7HNlYQIgWMuLUxGZbbcAmIX+YmRXuET97S7OWv+zWHVfb/rbXtI=—–END PRIVATE KEY—–加密字符串: hHXTF1K3w55Wd6OSjVYtqxceJ5VhlySNUahel9pwKD92Ef7wIT7DYPuJRKiqz5tuHtUqujbmbZBSL0qDE/EA+A==解密字符串: I love Python!*/Python 实现
模块:rsa:
import rsadef rsa_encrypt(pu_key, t): # 公钥加密 rsa = rsa.encrypt(t.encode(“utf-8”), pu_key) return rsadef rsa_decrypt(pr_key, t): # 私钥解密 rsa = rsa.decrypt(t, pr_key).decode(“utf-8”) return rsaif __name__ == “__main__”: public_key, private_key = rsa.newkeys(512) # 生成公钥、私钥 print(‘公钥:’, public_key) print(‘私钥:’, private_key) text = ‘I love Python!’ # 加密对象 encrypted_str = rsa_encrypt(public_key, text) print(‘加密字符串:’, encrypted_str) decrypted_str = rsa_decrypt(private_key, encrypted_str) print(‘解密字符串:’, decrypted_str)”’公钥:PublicKey(7636479066127060956100056267701318377455704072072698049978592945665550579944731953431504993757594103617537700972424661030900303472123028864161050235168613, 65537)私钥:PrivateKey(7636479066127060956100056267701318377455704072072698049978592945665550579944731953431504993757594103617537700972424661030900303472123028864161050235168613, 65537, 3850457767980968449796700480128630632818465005441846698224554128042451115530564586537997896922067523638756079019054611200173122138274839877369624069360253, 4713180694194659323798858305046043997526301456820208338158979730140812744181638767, 1620238976946735819854194349514460863335347861649166352709029254680140139)加密字符串:b”\x1aaeps\xa0c}\xb6\xcf\xa3\xb0\xbb\xedA\x7f}\x03\xdc\xd5\x1c\x9b\xdb\xda\xf9q\x80[=\xf5\x91\r\xd0’f\xce\x1f\x01\xef\xa5\xdb3\x96\t0qIxF\xbd\x11\xd6\xb25\xc5\xe1pM\xb4M\xc2\xd4\x03\xa6″解密字符串:I love Python!”’
模块 Cryptodome: