zoukankan      html  css  js  c++  java
  • [python]python学习笔记(七)——加密

    1,python对字符串加密常见的方法:

    [python] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. <pre code_snippet_id="340592" snippet_file_name="blog_20140512_1_2282504" name="code" class="python">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作为脚本来执行。  
  • 相关阅读:
    mysql truncate
    蠕虫复制
    mysql 一对多,多对多
    php实现文件下载
    JetBrains PhpStorm 整个项目中查找一个词语
    vim
    程序员减少代码BUG的7种方法,拒绝编程5分钟,查代码2小时!
    创建你的第一个Composer/Packagist包
    Elasticsearch
    Laravel 实践之路: 数据库迁移与数据填充
  • 原文地址:https://www.cnblogs.com/zhiliao112/p/4237266.html
Copyright © 2011-2022 走看看