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删除nginx缓存文件示例(python文件操作)
Mar 26 Python
python刷投票的脚本实现代码
Nov 08 Python
Python实现LRU算法的2种方法
Jun 24 Python
Python字典简介以及用法详解
Nov 15 Python
详解python开发环境搭建
Dec 16 Python
Python set常用操作函数集锦
Nov 15 Python
PyQt5每天必学之组合框
Apr 20 Python
python ChainMap 合并字典的实现步骤
Jun 11 Python
python tkinter canvas使用实例
Nov 04 Python
Tensorflow实现多GPU并行方式
Feb 03 Python
Transpose 数组行列转置的限制方式
Feb 11 Python
MxNet预训练模型到Pytorch模型的转换方式
May 25 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中去除所有js,html,css代码
2010/10/12 PHP
通过缓存数据库结果提高PHP性能的原理介绍
2012/09/05 PHP
PHP获取远程图片并保存到本地的方法
2015/05/12 PHP
微信公众号模板消息群发php代码示例
2016/12/29 PHP
tp5 实现列表数据根据状态排序
2019/10/18 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
怎么用javascript进行拖拽
2006/07/20 Javascript
JavaScript 创建对象
2009/07/17 Javascript
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
js 通用订单代码
2013/12/23 Javascript
深入理解javascript的执行顺序
2014/04/04 Javascript
JavaScript获取URL汇总
2015/06/08 Javascript
浅谈jquery设置和获得checkbox选中的问题
2016/08/19 Javascript
微信小程序之仿微信漂流瓶实例
2016/12/09 Javascript
基于node.js实现微信支付退款功能
2017/12/19 Javascript
Angularjs Promise实例详解
2018/03/15 Javascript
vue-自定义组件传值的实例讲解
2018/09/18 Javascript
小程序日历控件使用方法详解
2018/12/29 Javascript
探索JavaScript中私有成员的相关知识
2019/06/13 Javascript
vue 实现微信浮标效果
2019/09/01 Javascript
vue实现简易图片左右旋转,上一张,下一张组件案例
2020/07/31 Javascript
Vue+Element ui 根据后台返回数据设置动态表头操作
2020/09/21 Javascript
[01:33:59]真人秀《加油 DOTA》 第六期
2014/09/09 DOTA
Python实现自动添加脚本头信息的示例代码
2016/09/02 Python
python生成九宫格图片
2018/11/19 Python
对Python3之进程池与回调函数的实例详解
2019/01/22 Python
python中翻译功能translate模块实现方法
2020/12/17 Python
MAC彩妆澳洲官网:M·A·C AU
2021/01/17 全球购物
双十佳事迹材料
2014/01/29 职场文书
大学同学聚会邀请函
2014/01/29 职场文书
《鱼游到了纸上》教学反思
2014/02/20 职场文书
《风筝》教学反思
2014/04/10 职场文书
五水共治捐款倡议书
2014/05/14 职场文书
人代会简报
2015/07/21 职场文书
利用html+css实现菜单栏缓慢下拉效果的示例代码
2021/03/30 HTML / CSS
nginx日志格式分析和修改
2022/04/28 Servers