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简单获取本机计算机名和IP地址的方法
Jun 03 Python
浅析Python中MySQLdb的事务处理功能
Sep 21 Python
利用Tkinter和matplotlib两种方式画饼状图的实例
Nov 06 Python
django admin添加数据自动记录user到表中的实现方法
Jan 05 Python
Python3.5文件读与写操作经典实例详解
May 01 Python
python itchat实现调用微信接口的第三方模块方法
Jun 11 Python
python Django里CSRF 对应策略详解
Aug 05 Python
用Python调用win命令行提高工作效率的实例
Aug 14 Python
python3 pillow模块实现简单验证码
Oct 31 Python
wxPython实现画图板
Aug 27 Python
Python更新所有已安装包的操作
Feb 13 Python
python删除指定列或多列单个或多个内容实例
Jun 28 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
GBK的页面输出JSON格式的php函数
2010/02/16 PHP
PHP程序员最常犯的11个MySQL错误小结
2010/11/20 PHP
PHP开发规范手册之PHP代码规范详解
2011/01/13 PHP
php中global和$GLOBALS[]的分析之一
2012/02/02 PHP
php使用sql数据库 获取字段问题介绍
2013/08/12 PHP
PHP查询快递信息的方法
2015/03/07 PHP
php实现微信企业付款到个人零钱功能
2018/10/09 PHP
Nigma vs Liquid BO3 第二场2.14
2021/03/10 DOTA
jquery的颜色选择插件实例代码
2008/10/02 Javascript
js实现无需数据库的县级以上联动行政区域下拉控件
2013/08/14 Javascript
Js中的onblur和onfocus事件应用介绍
2013/08/27 Javascript
div模拟滚动条效果示例代码
2013/10/16 Javascript
提取jquery的ready()方法单独使用示例
2014/03/25 Javascript
JavaScript新增样式规则(推荐)
2016/07/19 Javascript
D3.js实现直方图的方法详解
2016/09/25 Javascript
关于angularJs指令的Scope(作用域)介绍
2016/10/25 Javascript
node.js调用Chrome浏览器打开链接地址的方法
2017/05/17 Javascript
微信小程序 如何引入外部字体库iconfont的图标
2018/01/31 Javascript
Vue在页面数据渲染完成之后的调用方法
2018/09/11 Javascript
JavaScript实现随机点名器实例详解
2019/05/07 Javascript
js实现随机数小游戏
2019/06/28 Javascript
php使用递归与迭代实现快速排序示例
2014/01/23 Python
python使用PyGame绘制图像并保存为图片文件的方法
2015/04/24 Python
python实现自动重启本程序的方法
2015/07/09 Python
Python学习笔记之视频人脸检测识别实例教程
2019/03/06 Python
Python中remove漏删和索引越界问题的解决
2020/03/18 Python
Python Selenium截图功能实现代码
2020/04/26 Python
Django缓存Cache使用详解
2020/11/30 Python
建筑设计师岗位职责
2013/11/18 职场文书
大学生标准推荐信范文
2013/11/25 职场文书
人事任命书范文
2014/06/04 职场文书
投标承诺函范文
2015/01/21 职场文书
《女娲补天》读后感5篇
2019/12/31 职场文书
MySQL root密码的重置方法
2021/04/21 MySQL
Vue全家桶入门基础教程
2021/05/14 Vue.js
探究Mysql模糊查询是否区分大小写
2021/06/11 MySQL