python字符串加密解密

1. 最簡單的方法是用base64:

import
 base64
s1 
=
 base64.encodestring(
'
hello world
'
)
s2 
=
 base64.decodestring(s1)
print
 s1,s2
#
 aGVsbG8gd29ybGQ=\n
#
 hello world


這是最簡單的方法了,但是不夠保險,因爲如果別人拿到你的密文,也可以自己解密來得到明文


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


 這種方法也很方便,而且可以設置自己的密鑰,比第一種方法更加安全,是加密解密的首選之策!

 

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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章