Python RSA加解密
RSA是一种非对称加密技术,在软件、网页中已得到广泛应用,特别对于爬虫来说,会经常遇到使用RSA加密的网站,掌握RSA加密和解密的流程,在遇到相关网站时,可以第一时间辨别出网站的加密逻辑,从而快速破解。
利用python实现RSA加密,需要安装模块pip install pycryptodome
生成密钥对
一般在业务对接或爬取网站数据时,公钥和私钥肯定是已经定好的,但是这里我们为了后续可以进行加解密的模拟操作,先了解下如何自己创建秘钥对。
1 | from Crypto.PublicKey import RSA |
1 | b'-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEA1SCt+JO0PA8aFGUx2yxlg/V5gy4Q2oWNszP5T/JxEONv5xgv\nUT6rV8ncGJRzHllnI5wJw1UR62uVQhoWi8HzYHVxCUKIH6jlnbY6ocRu89PDHUXU\nMseLwiatqj2TEhOEXeDhvcqcK4uVDftMupyCPDZtdHvAzTuicCKT8CBOMFF0VsME\nr9SwQYxVwEUIskis9x2Z4cT3TCox50zifx9pPmxneQ7OsKTHhjwqUF/3V12IB9hA\ndijzQjwe+Q0x24MTP5VBhuZD9j21KNjMPkdfcn+Ad0OYklMGh4urI3O7/vUh6/Tv\nzAN7N9mKfjP+BIwhtTdQZWw9gJG+bz24LEHNgQIDAQABAoIBABIyWZg1KDjOg0gF\ngdW4Oyyim07XcontyDTqNZmdVgj+mjHNb1DM/H0g14Fjv1ZyhKtWKcE7NK34gARm\nTNF+7EQqks2bGBs35O7rvaLNLjn0NR79NMpnHigj/ETiP/nVn8ISLsPxFhdjsgTB\nFYKDVV1Ful+tJz9+nXZchWwFnhdi3Q/cTCkv3r88La5rpfiFE+Ozf/GBthUuNTPq\ns9Xn5gvQXqyLWz32yUi2us8a6F/GS68jTcNciQ/33cjJG6ufUX+neW/h1DNXh1ET\nQIzSWGV0vk98FmKAcUDq8/SNVqt8CqgT6iwSol6ry6nkfVeU1tebB3KUCX2U+gHY\neD6P/e8CgYEA3j+99tQdQ15ggt4lDLbkvQyfLKxL/TUfbyesTw5nBCu2oHOVUqO8\nh8XoU+At2TJ5iEGmWPAHbvp6Rnj3BjMoo1bFy+ZNJjVWQraKNSGcwoZA5VHJAJvj\nca9qUqM7VM5XfJRTZAgj/1bvF0jMvypacyJ4bp+1il2VXN2ntXUgHv8CgYEA9X5V\nAMwLnDwjNBmJiXWcsgw9hamawo2dju4F7QQS3qWTJPmfppWQdtvBLn5kPS2HoS/b\nh+to+7xy0nRJqlTtPym1oPunRbttJbHCs2H77O15M3DzLSz0xh/hnswP5zt41Sto\nzZ/Ue8APGqv1y4iWugN1kD0xeDQwlDkmdyZ6k38CgYBk416ii4t1J4R8I8eBzAxt\n3SrsppIgMVtBpCrOAGW3OPjAQXfJedZ9c9ORL7TgYc9VkSeoO93D/SRAlWzdfZ+2\n9g74DmV7ML8lraNzlvyIOVWAQ+4QvrMyykRjmwG17607OkHYqPFeWeJTGZMIPHuu\nxDkTTqCkXPMOovgcoTyhlQKBgA3K1TfAPv6+GjQ5IxMH+o++RE6YIsu/bRS0pryU\nOAMuRkATjjarvHwRCJ92FmehgTc7Gxhdz34lLkZIpkLdlp6v1zZ+LP2r9AvkGs49\nOQwso1ySgfcNyYrAC8sCJ/qTyswfLjovOp7hQXf8JUkUGXPF8frylS7tr7UEKPcU\nwFo9AoGBAJmJULR9ZwRtwybgxjSrBJ4tt6py+k8U8rtvWnQCpmhwzYyZpwDmEKa/\nbYMSa0fiI5fD5BSX1i71vN3jHwh/YvBTQVTVeoSSwD8GJh+isNUnPC2PCRNYCUvK\njXis2TKzD2KfVQEaD8Gamk60qeaKRDH8L7fyjE4VTfyrFX4w4TOi\n-----END RSA PRIVATE KEY-----' |
可以看出来RSA的公钥和私钥的特征比较明显,通过这个特征有时也可以帮我们快速判断加密方法。
加密
加密流程:
- 输入文本(str);
- 字符串编码(默认utf-8)(bytes);
- rsa加密(bytes);
- base64编码(bytes);
- 解码为字符串(str)。
下面的代码承接上面生成的秘钥和公钥
1 | import base64 |
1 | 密文: Ul6HCvcbWg2JBjjKlpr5LmGGjJnEZUv8dMpODF132VWeMcHJis1OqsW1rycQm18mTyA1AydRDp1vc2T8sg7qTZFPS1W2YtLmalpwnVKdcC7arGNURAzw/3NGLbRpMAsvqiMusI8nX9EaA6iZE4TLV61DHgUdQLoiosKiKlnx5l+POO2C9X47J+U1+PG/977a8zUAlmsZv85sQ1TtKXgqAGhpGkMnNYzS6YHOBCfJiXVYgOWO3BTYh35k8AHaL6FOxHrJePzmHiLl4vB9qhhMvT3xm3t32LGMUOI4vEWrB/jnF3dJgzfomYpTEbRWCnhJecjzVd1oZm0gV+bmLKrcyQ== |
解密
解密流程:
- 输入文本(str);
- 字符串编码(默认utf-8)(bytes);
- base64解码(bytes);
- rsa解密(bytes);
- 解码为字符串(str)。
下面的代码承接上面加密部分的代码
1 | from Crypto import Random |