Python2-RSA加密文件
每个人都有自己的小秘密,如何保护好它是非常重要的。我通过Python27结合RSA算法保护我的”小秘密”。
准备
使用pycrypto库就可以完成RSA加、解密。
Pycrypto
使用pip快捷安装pycrypto。如果对pycrypto感兴趣,可以参考文档。
1 | pip install pycrypto |
如果无法使用pip安装,可以在这里下载编译好的源文件进行安装。
终端处理
终端信息获取可以通过sys.argv或者使用getopt库。
sys
sys.argv是一个列表对象。用来获取终端信息。终端格式示例。
1 | python getinfo.py info1 info2 info3 |
sys.argv[0]是getinfo.py,sys.argv[1]是info1,sys.argv[2]是info2,sys.argv[3]是info3。
Getopt
getopt可以用来获取终端参数,实际使用的时候效果比sys.argv好很多。如果对getopt感兴趣,可以参考文档
getopt有短格式、长格式。”-h-f:”为短格式,如果后面带冒号说明该参数需要加参数值,不加冒号说明该参数不需要加参数值。”[‘help’, ‘file=’]”为长格式,如果后面带等号说明该参数需要加参数值,如果后面不带等号说明该参数不需要参数值。
终端格式示例。
1 | python getinfo.py -h -f=info.txt |
代码示例。
1 | import getopt |
pycrypto使用
pycrypto包含许多加密方式:AES、SHA256、RSA等。出于安全性考虑,我使用RSA来加密文件。
生成公、私钥文件
RSA加密需要使用到公钥文件、RSA解密需要使用到私钥文件。如果大家对RSA算法不了解的话,可以参考Wiki。
通过上文可以得知,生成自己的公钥、私钥文件是十分重要的。pycrypto支持生成公钥、私钥文件。
代码示例。
1 | from Crypto import Random |
RSA加密
RSA加密需要使用到公钥文件。
代码示例。
1 | from Crypto import Random |
RSA解密
RSA解密需要使用到私钥文件。
代码示例。
1 | from Crypto import Random |
总结
在编写使用RSA加密文件时,遇到了几个问题,在此记录一下。
- 使用getopt库作为命令行参数获取,使用for获取对应参数的值的时候,获取得到值是以=开头。因此,实际需要使用value[1:]来获取;
- RSA加密常见的key_size有1024bit、2048bit两种,解密的时候需要选择跟加密时一样的bit;
- RSA加密单次加密字符的长度有限制,最大为(key_size/8)-11;
- 使用1024bitRSA加密100长度的字符会生成128长度的加密过的字符;
- 使用2048bitRSA加密200长度的字符会生成256长度的加密过的字符。
完整代码
完整代码支持终端获取参数、文件夹所有文件RSA加密、文件夹所有文件RSA解密。
完整代码已经上传到我的GiHub。如果有兴趣,不妨移步到Github上一观!**Code**。