[Python] 字符串加密解密

1. 最简单的方法是用base64:

import  base64

s1 
=  base64.encodestring( ' hello world ' )
s2 
=  base64.decodestring(s1)
print  s1,s2

#  aGVsbG8gd29ybGQ=\n
#
 hello world


Note: 这是最简单的方法了,但是不够保险,因为如果别人拿到你的密文,也可以自己解密来得到明文


2. 第二种方法是使用win32com.client

import  win32com.client
def  encrypt(key,content):  #  key:密钥,content:明文
    EncryptedData  =  win32com.client.Dispatch( ' CAPICOM.EncryptedData ' )
    EncryptedData.Algorithm.KeyLength 
=   5
    EncryptedData.Algorithm.Name 
=   2
    EncryptedData.SetSecret(key)
    EncryptedData.Content 
=  content
    
return  EncryptedData.Encrypt()

def  decrypt(key,content):  #  key:密钥,content:密文
    EncryptedData  =  win32com.client.Dispatch( ' CAPICOM.EncryptedData ' )
    EncryptedData.Algorithm.KeyLength 
=   5
    EncryptedData.Algorithm.Name 
=   2
    EncryptedData.SetSecret(key)
    EncryptedData.Decrypt(content)
    str 
=  EncryptedData.Content
    
return  str

s1 
=  encrypt( ' lovebread ' ' hello world ' )
s2 
=  decrypt( ' lovebread ' , s1)
print  s1,s2

#  MGEGCSsGAQQBgjdYA6BUMFIGCisGAQQBgjdYAwGgRDBCAgMCAAECAmYBAgFABAgq
#
 GpllWj9cswQQh/fnBUZ6ijwKDTH9DLZmBgQYmfaZ3VFyS/lq391oDtjlcRFGnXpx
#
 lG7o
#
 hello world

 

Note: 这种方法也很方便,而且可以设置自己的密钥,比第一种方法更加安全,是加密解密的首选之策!

 

3. 还有就是自己写加密解密算法,比如:

def  encrypt(key, s):
    b 
=  bytearray(str(s).encode( " gbk " ))
    n 
=  len(b)  #  求出 b 的字节数
    c  =  bytearray(n * 2 )
    j 
=  0
    
for  i  in  range(0, n):
        b1 
=  b[i]
        b2 
=  b1  ^  key  #  b1 = b2^ key
        c1  =  b2  %   16
        c2 
=  b2  //   16   #  b2 = c2*16 + c1
        c1  =  c1  +   65
        c2 
=  c2  +   65   #  c1,c2都是0~15之间的数,加上65就变成了A-P 的字符的编码
        c[j]  =  c1
        c[j
+ 1 =  c2
        j 
=  j + 2
    
return  c.decode( " gbk " )

def  decrypt(key, s):
    c 
=  bytearray(str(s).encode( " gbk " ))
    n 
=  len(c)  #  计算 b 的字节数
     if  n  %   2   !=  0 :
        
return   ""
    n 
=  n  //   2
    b 
=  bytearray(n)
    j 
=  0
    
for  i  in  range(0, n):
        c1 
=  c[j]
        c2 
=  c[j + 1 ]
        j 
=  j + 2
        c1 
=  c1  -   65
        c2 
=  c2  -   65
        b2 
=  c2 * 16   +  c1
        b1 
=  b2 ^  key
        b[i]
=  b1
    
try :
        
return  b.decode( " gbk " )
    
except :
        
return   " failed "

key 
=   15
s1 
=  encrypt(key,  ' hello world ' )
s2 
=  decrypt(key, s1)
print  s1, ' \n ' ,s2 

#  HGKGDGDGAGPCIHAGNHDGLG
#
 hello world


 Note: 这是网上抄来的一个简单的例子,还有许许多多复杂的加密算法,大家可以自行查阅密码学的相关算法。

转载于:https://www.cnblogs.com/lovebread/archive/2010/11/09/1872747.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值