Python字符串加密解密方法总结

简介:

   编程中经常会对字符串做加密解密处理,特别是涉及到隐私的字符串,如密码等的时候,就需要加密,自己总结了一下,大致有三种:base64,win32com.client和自己写加密解密算法,当然最安全的就是自己写加密解密算法了。

 
  1. 1. 最简单的方法是用base64: 
  2.  
  3. import base64 
  4.  
  5. s1 = base64.encodestring('hello world'
  6. s2 = base64.decodestring(s1) 
  7. print s1,s2 
  8.  
  9. # aGVsbG8gd29ybGQ=\n 
  10. # hello world 
  11.  
  12. 注: 这是最简单的方法了,但是不够保险,因为如果别人拿到你的密文,也可以自己解密来得到明文;不过可以把密文字符串进行处理,如字母转换成数字或是特殊字符等,自己解密的时候在替换回去在进行base64.decodestring,这样要安全很多。 
  13.  
  14.  
  15.  
  16.  
  17. 2. 第二种方法是使用win32com.client 
  18.  
  19. import win32com.client 
  20. def encrypt(key,content): # key:密钥,content:明文 
  21.     EncryptedData = win32com.client.Dispatch('CAPICOM.EncryptedData'
  22.     EncryptedData.Algorithm.KeyLength = 5 
  23.     EncryptedData.Algorithm.Name = 2 
  24.     EncryptedData.SetSecret(key) 
  25.     EncryptedData.Content = content 
  26.     return EncryptedData.Encrypt() 
  27.  
  28. def decrypt(key,content): # key:密钥,content:密文 
  29.     EncryptedData = win32com.client.Dispatch('CAPICOM.EncryptedData'
  30.     EncryptedData.Algorithm.KeyLength = 5 
  31.     EncryptedData.Algorithm.Name = 2 
  32.     EncryptedData.SetSecret(key) 
  33.     EncryptedData.Decrypt(content) 
  34.     str = EncryptedData.Content 
  35.     return str 
  36.  
  37. s1 = encrypt('lovebread''hello world'
  38. s2 = decrypt('lovebread', s1) 
  39. print s1,s2 
  40.  
  41. # MGEGCSsGAQQBgjdYA6BUMFIGCisGAQQBgjdYAwGgRDBCAgMCAAECAmYBAgFABAgq 
  42. # GpllWj9cswQQh/fnBUZ6ijwKDTH9DLZmBgQYmfaZ3VFyS/lq391oDtjlcRFGnXpx 
  43. # lG7o 
  44. # hello world 
  45.   
  46.  
  47. 注:  这种方法也很方便,而且可以设置自己的密钥,比第一种方法更加安全,如果对安全级别要求不太高的话这种方法是加密解密的首选之策! 
  48.  
  49.   
  50.  
  51. 3. 还有就是自己写加密解密算法,比如: 
  52.  
  53. def encrypt(key, s): 
  54.     b = bytearray(str(s).encode("gbk")) 
  55.     n = len(b) # 求出 b 的字节数 
  56.     c = bytearray(n*2
  57.     j = 0 
  58.     for i in range(0, n): 
  59.         b1 = b[i] 
  60.         b2 = b1 ^ key # b1 = b2^ key 
  61.         c1 = b2 % 16 
  62.         c2 = b2 // 16 # b2 = c2*16 + c1 
  63.         c1 = c1 + 65 
  64.         c2 = c2 + 65 # c1,c2都是0~15之间的数,加上65就变成了A-P 的字符的编码 
  65.         c[j] = c1 
  66.         c[j+1] = c2 
  67.         j = j+2 
  68.     return c.decode("gbk"
  69.  
  70. def decrypt(key, s): 
  71.     c = bytearray(str(s).encode("gbk")) 
  72.     n = len(c) # 计算 b 的字节数 
  73.     if n % 2 != 0 : 
  74.         return "" 
  75.     n = n // 2 
  76.     b = bytearray(n) 
  77.     j = 0 
  78.     for i in range(0, n): 
  79.         c1 = c[j] 
  80.         c2 = c[j+1
  81.         j = j+2 
  82.         c1 = c1 - 65 
  83.         c2 = c2 - 65 
  84.         b2 = c2*16 + c1 
  85.         b1 = b2^ key 
  86.         b[i]= b1 
  87.     try
  88.         return b.decode("gbk"
  89.     except
  90.         return "failed" 
  91.  
  92. key = 15 
  93. s1 = encrypt(key, 'hello world'
  94. s2 = decrypt(key, s1) 
  95. print s1,'\n',s2  
  96.  
  97. # HGKGDGDGAGPCIHAGNHDGLG 
  98. # hello world 
  99.  
  100.  
  101. 注: 这是网上抄来的一个简单的例子,大家可以自定义自己算法进行加密解密;还有许许多多复杂的加密算法,大家可以自行查阅密码学的相关算法。 
  102.  
  103. 4.对于python来说,也可以把python源码文件编译成pyc二进制格式的文件,这样别人就看不到你的源码,也算是一种加密方法吧,方法如下: 
  104. 执行命令python -m py_compile create_slave.py 可以直接生成一个create_slave.pyc文件,然后可以用create_slave.pyc来替换create_slave.py作为脚本来执行。 

 


本文转自 lover00751CTO博客,原文链接:http://blog.51cto.com/wangwei007/1108784,如需转载请自行联系原作者


相关文章
|
4天前
|
Python
python魔法方法如何应用
这个Python示例展示了类继承和方法重写。`Student`类继承自`Person`,并覆盖了`say_hello`方法。通过`super().__init__(name)`调用父类的`__init__`初始化`name`属性,`Student`添加了`age`属性,并在重写的`say_hello`中使用。创建`Student`实例`student`并调用其`say_hello`,输出定制的问候信息。
15 1
|
9天前
|
Python
1167: 分离字符串(PYTHON)
1167: 分离字符串(PYTHON)
|
26天前
|
安全 API 开发工具
oss加密的配置方法
阿里云OSS提供多种加密选项:SSE-OSS(默认或对象级AES-256加密)、SSE-KMS(使用KMS托管CMK)、临时密钥加密和客户端加密(CSE)。可通过控制台或API设置Bucket策略,使用HTTP头部指定加密方式。KMS和临时密钥可能涉及更复杂的密钥管理和权限配置。
117 5
|
27天前
|
数据安全/隐私保护
使用加密工具类进行有效的字符串加密——CSDN博客
使用加密工具类进行有效的字符串加密——CSDN博客
14 0
|
1天前
|
数据采集 Python
python学习9-字符串
python学习9-字符串
|
5天前
|
机器学习/深度学习 人工智能 算法
|
5天前
|
安全 Python
python字典的内置方法
Python字典主要方法包括:`keys()`(返回所有键)、`values()`(返回所有值)、`items()`(返回所有键值对)、`get()`(安全取值,键不存在时返回默认值)、`setdefault()`(设置默认值)、`update()`(合并字典)、`pop()`(删除并返回值)、`clear()`(清空字典)、`copy()`(浅拷贝)、`fromkeys()`(新建字典并设置默认值)、`popitem()`(随机删除键值对)。
6 0
|
9天前
|
Python
171: 字符串的倒序(python)
171: 字符串的倒序(python)
|
14天前
|
存储 Python
python基础篇: 详解 Python 字典类型内置方法
python基础篇: 详解 Python 字典类型内置方法
25 1
|
17天前
|
Java 测试技术 Python
Python开启线程和线程池的方法
Python开启线程和线程池的方法
12 0
Python开启线程和线程池的方法