最近有需求,需要研究一下RSA加密解密安全;在網上百度了一下例子文章,很少有文章介紹怎么保存、傳輸、打印加密后的文本信息,都是千篇一律的。直接在一個腳本,加密后的文本信息賦于變量,然后立馬調用解密。仔細想了一下RSA加密解密的過程,確定有二端,一端為:加密端,一端為解密端,一般不在同一臺機器。在這里,我只模擬了保存在文件,然后再讀出來;關于怎以通過網絡傳輸,也是大同小異。
用RSA加密后的密文,是無法直接用文本顯示,因為存在一些無法用文本信息編碼顯示的二進制數據。對于保存,網絡傳輸,打印不亂碼,需要通base64編碼進行轉換;base64編解碼能把一些無法直接用文件本信息編碼的二進制數據,轉換成常規的二進制數據。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
#/usr/bin/env python # -*- coding: utf-8 -*- import rsa import sys import base64 # 打印 python 版本 與 windows 系統編碼 print ( "---- 1 ----" ) print (sys.version) print (sys.getdefaultencoding()) print (sys.getfilesystemencoding()) # 先生成一對密鑰,然后保存.pem格式文件,當然也可以直接使用 print ( "---- 2 ----" ) (pubkey, privkey) = rsa.newkeys( 1024 ) pub = pubkey.save_pkcs1() print ( type (pub)) pubfile = open ( 'public.pem' , 'w+' ) pubfile.write(pub.decode( 'utf-8' )) pubfile.close() print ( "---- 3 ----" ) pri = privkey.save_pkcs1() print ( type (pri)) prifile = open ( 'private.pem' , 'w+' ) prifile.write(pri.decode( 'utf-8' )) prifile.close() # load公鑰和密鑰 print ( "---- 4 ----" ) message = 'dPabdbGDpFTrwwgydVafdlsadlfsal%46645645s' print ( 'message:' , type (message)) with open ( 'public.pem' ) as publickfile: p = publickfile.read() print ( type (p)) pubkey = rsa.PublicKey.load_pkcs1(p.encode( 'utf-8' )) with open ( 'private.pem' ) as privatefile: p = privatefile.read() print ( type (p)) privkey = rsa.PrivateKey.load_pkcs1(p.encode( 'utf-8' )) # 用公鑰加密、再用私鑰解密 crypto = rsa.encrypt(message.encode( 'utf-8' ),pubkey) print (crypto) print ( "---- 5 ----" ) print ( 'crypto:' , type (crypto)) print ( 'cry_base64:' ,base64.encodestring(crypto)) print ( 'cry_base64_utf8:' ,base64.encodestring(crypto).decode( 'utf-8' )) # 保存到本地文件 cry_file = open ( 'cry_file.txt' , 'w+' ) cry_file.write(base64.encodestring(crypto).decode( 'utf-8' )) cry_file.close() print ( "---- 6 ----" ) # 從本地文件讀取 cry_file = open ( 'cry_file.txt' , 'r' ) cry_text = '' for i in cry_file.readlines(): cry_text + = i print ( 'cry_text_type:' , type (cry_text)) print ( 'cry_text:' ,cry_text) print ( 'cry_base64:' ,cry_text.encode( 'utf-8' )) crypto_tra = base64.decodestring(cry_text.encode( 'utf-8' )) print ( "---- 7 ----" ) assert crypto = = crypto_tra print (crypto) print ( "---- 8 ----" ) plaintext = rsa.decrypt(crypto,privkey) assert message = = plaintext.decode( 'utf-8' ) print (plaintext.decode( 'utf-8' )) |
以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持服務器之家!
原文鏈接:http://www.cnblogs.com/52python/p/6589869.html