在爬蟲分析的時候,經常在網頁上看到如下格式的rsa公鑰
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDC7kw8r6tq43pwApYvkJ5laljaN9BZb21TAIfT/vexbobzH7Q8SUdP5uDPXEBKzOjx2L28y7Xs1d9v3tdPfKI2LR7PAzWBmDMn8riHrDDNpUpJnlAGUqJG9ooPn8j7YNpcxCa1iybOlc2kEhmJn5uwoanQq+CA6agNkqly2H4j6wIDAQAB
對於rsa算法的公鑰,我們瞭解到,主要有兩個信息:模數(modulus)和指數(exponent)
只有有這兩個信息,我們便可以用以下代碼段生成公鑰,然後使用rsa庫對數據進行加密
接下來用代碼實現
def str2key(s):
# 對字符串解碼
b_str = base64.b64decode(s)
if len(b_str) < 162:
return False
hex_str = ''
# 按位轉換成16進制
for x in b_str:
h = hex(x)[2:]
h = h.rjust(2, '0')
hex_str += h
# 找到模數和指數的開頭結束位置
m_start = 29 * 2
e_start = 159 * 2
m_len = 128 * 2
e_len = 3 * 2
modulus = hex_str[m_start:m_start + m_len]
exponent = hex_str[e_start:e_start + e_len]
return modulus, exponent
我對上面那個rsa公鑰進行解碼
得到結果
('c2ee4c3cafab6ae37a7002962f909e656a58da37d0596f6d530087d3fef7b16e86f31fb43c49474fe6e0cf5c404acce8f1d8bdbccbb5ecd5df6fded74f7ca2362d1ecf033581983327f2b887ac30cda54a499e500652a246f68a0f9fc8fb60da5cc426b58b26ce95cda41219899f9bb0a1a9d0abe080e9a80d92a972d87e23eb', '010001')
這2個參數也就是莫屬和指數
結下來就是對數據進行加密,
# 加密
def to_para(key,message):
message = str(message).encode()
modulus = int(key[0], 16)
exponent = int(key[1], 16)
rsa_pubkey = rsa.PublicKey(modulus, exponent)
crypto = rsa.encrypt(message, rsa_pubkey)
b64str = base64.b64encode(crypto)
return b64str
返回的結果就是加密後的參數
我們對一些數據進行加密
s = hashlib.md5("MCX00023".encode()).hexdigest()
#
a = to_para(key,'1')
print(a)
我對結果進行打印
b'TpisN9WMesup6aU0pbpomiNM3rr4LKoZBoupw9okObXRrCEYZy9ASGQhicbm7dW5oRMwQUgm1R7sD+36cmSg4EoTe61zyraWh6Jg/XLwZrCYuF8dIYw0VNM4CJE5f3ea6PBwDbkROzgU8hmJApiP/YE+T5pebeTBBKmVEuq0Jy4='
然後就可以開心的爬蟲了。。。。