python字符串加密解密的三种方法分享(base64 win32com)


Posted in Python onJanuary 19, 2014

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
Python 相关文章推荐
python基于xmlrpc实现二进制文件传输的方法
Jun 02 Python
Django基础之Model操作步骤(介绍)
May 27 Python
python的unittest测试类代码实例
Dec 07 Python
Python给你的头像加上圣诞帽
Jan 04 Python
Python实现屏幕截图的两种方式
Feb 05 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
May 25 Python
python多任务之协程的使用详解
Aug 26 Python
opencv实现简单人脸识别
Feb 19 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
Oct 30 Python
利用pyshp包给shapefile文件添加字段的实例
Dec 06 Python
详解Python的三种拷贝方式
Feb 11 Python
Python使用Numpy模块读取文件并绘制图片
May 13 Python
python实现人人网登录示例分享
Jan 19 #Python
使用BeautifulSoup爬虫程序获取百度搜索结果的标题和url示例
Jan 19 #Python
压缩包密码破解示例分享(类似典破解)
Jan 17 #Python
vc6编写python扩展的方法分享
Jan 17 #Python
python的urllib模块显示下载进度示例
Jan 17 #Python
Python中for循环详解
Jan 17 #Python
python在命令行下使用google翻译(带语音)
Jan 16 #Python
You might like
PHP默认安装产生系统漏洞
2006/10/09 PHP
php 大数据量及海量数据处理算法总结
2011/05/07 PHP
php实现对象克隆的方法
2015/06/20 PHP
Thinkphp5框架实现获取数据库数据到视图的方法
2019/08/14 PHP
phpQuery采集网页实现代码实例
2020/04/02 PHP
在一个js文件里远程调用jquery.js会在ie8下的一个奇怪问题
2010/11/28 Javascript
从零开始学习jQuery (六) jquery中的AJAX使用
2011/02/23 Javascript
js动态设置div的值下例子
2013/10/29 Javascript
js中arguments,caller,callee,apply的用法小结
2014/01/28 Javascript
window.location不跳转的问题解决方法
2014/04/17 Javascript
javascript去除字符串中所有标点符号和提取纯文本的正则
2014/06/07 Javascript
Jquery实现由下向上展开效果的例子
2014/12/08 Javascript
JS实现超简洁网页title标题跑动闪烁提示效果代码
2015/10/23 Javascript
TypeOf这些知识点你了解吗
2016/02/21 Javascript
理解javascript定时器中的setTimeout与setInterval
2016/02/23 Javascript
第一章之初识Bootstrap
2016/04/25 Javascript
jQuery基于ajax操作json数据简单示例
2017/01/05 Javascript
10行原生JS实现文字无缝滚动(超简单)
2018/01/02 Javascript
nodejs中用npm初始化来创建package.json的实例讲解
2018/10/10 NodeJs
js前端面试之同步与异步问题详解
2019/04/03 Javascript
vue 实现websocket发送消息并实时接收消息
2019/12/09 Javascript
JS实现星星海特效
2019/12/24 Javascript
JavaScript实现拖拽效果
2020/03/16 Javascript
TypeScript 运行时类型检查补充工具
2020/09/28 Javascript
JavaScript实现切换多张图片
2021/01/27 Javascript
Python实现计算最小编辑距离
2016/03/17 Python
Python 、Pycharm、Anaconda三者的区别与联系、安装过程及注意事项
2019/10/11 Python
为什么UNION ALL比UNION快
2016/03/17 面试题
工业设计专业个人求职信范文
2013/12/28 职场文书
汽车制造与装配专业自荐信范文
2014/01/02 职场文书
九年级语文教学反思
2014/02/04 职场文书
党支部党的群众路线对照检查材料
2014/09/24 职场文书
《刷子李》教学反思
2016/02/20 职场文书
SQL Server基本使用和简单的CRUD操作
2021/04/05 SQL Server
Python还能这么玩之只用30行代码从excel提取个人值班表
2021/06/05 Python
Go语言读取txt文档的操作方法
2022/01/22 Golang