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中使用成员运算符的示例
May 13 Python
Django中实现点击图片链接强制直接下载的方法
May 14 Python
Python字符串切片操作知识详解
Mar 28 Python
浅谈flask截获所有访问及before/after_request修饰器
Jan 18 Python
Python实现去除列表中重复元素的方法小结【4种方法】
Apr 27 Python
python matplotlib画图库学习绘制常用的图
Mar 19 Python
Pandas读写CSV文件的方法示例
Mar 27 Python
Flask之pipenv虚拟环境的实现
Nov 26 Python
Python configparser模块配置文件过程解析
Mar 03 Python
Python try except异常捕获机制原理解析
Apr 18 Python
pycharm sciview的图片另存为操作
Jun 01 Python
Python Charles抓包配置实现流程图解
Sep 29 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多态的实现详解
2013/06/09 PHP
php cli换行示例
2014/04/22 PHP
nginx+thinkphp下解决不支持pathinfo模式
2015/07/01 PHP
注意!PHP 7中不要做的10件事
2016/09/18 PHP
基于jquery的固定表头和列头的代码
2012/05/03 Javascript
javascript避免数字计算精度误差的方法详解
2014/03/05 Javascript
Javascript图片上传前的本地预览实例
2014/06/16 Javascript
AngularJS学习笔记之基本指令(init、repeat)
2015/06/16 Javascript
jQuery实现默认是闭合的FAQ展开效果菜单
2015/09/14 Javascript
js闭包引起的事件注册问题介绍
2016/03/29 Javascript
全面介绍javascript实用技巧及单竖杠
2016/07/18 Javascript
Vue.js 2.0 移动端拍照压缩图片上传预览功能
2017/03/06 Javascript
jQuery插件zTree实现的多选树效果示例
2017/03/08 Javascript
详解webpack分离css单独打包
2017/06/21 Javascript
简单的vuex 的使用案例笔记
2018/04/13 Javascript
JS原生带缩略图的图片切换效果
2018/10/10 Javascript
微信小程序如何播放腾讯视频的实现
2019/09/20 Javascript
利用Psyco提升Python运行速度
2014/12/24 Python
K-means聚类算法介绍与利用python实现的代码示例
2017/11/13 Python
基于Python的文件类型和字符串详解
2017/12/21 Python
python实现按长宽比缩放图片
2018/06/07 Python
Python字符串匹配之6种方法的使用详解
2019/04/08 Python
对Django的restful用法详解(自带的增删改查)
2019/08/28 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
2019/10/23 Python
使用pandas 将DataFrame转化成dict
2019/12/10 Python
Python 给下载文件显示进度条和下载时间的实现
2020/04/02 Python
python的help函数如何使用
2020/06/11 Python
python3 通过 pybind11 使用Eigen加速代码的步骤详解
2020/12/07 Python
python 利用panda 实现列联表(交叉表)
2021/02/06 Python
CAT鞋英国官网:坚固耐用的靴子和鞋
2016/10/21 全球购物
保护动物的标语
2014/06/11 职场文书
2014年党的群众路线整改措施思想汇报
2014/10/12 职场文书
综合办公室主任岗位职责
2015/04/01 职场文书
教师信息技术学习心得体会
2016/01/21 职场文书
2016小学优秀教师先进事迹材料
2016/02/26 职场文书
NodeJs使用webpack打包项目的方法详解
2022/02/28 NodeJs