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实现的几个常用排序算法实例
Jun 16 Python
Python实现拼接多张图片的方法
Dec 01 Python
python中__call__内置函数用法实例
Jun 04 Python
python对DICOM图像的读取方法详解
Jul 17 Python
Python解决N阶台阶走法问题的方法分析
Dec 28 Python
django 2.0更新的10条注意事项总结
Jan 05 Python
使用PyCharm创建Django项目及基本配置详解
Oct 24 Python
python random从集合中随机选择元素的方法
Jan 23 Python
Python3.6+Django2.0以上 xadmin站点的配置和使用教程图解
Jun 04 Python
python判断自身是否正在运行的方法
Aug 08 Python
使用Python打造一款间谍程序的流程分析
Feb 21 Python
python如何利用Mitmproxy抓包
Oct 10 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
新版mysql+apache+php Linux安装指南
2006/10/09 PHP
php SQL防注入代码集合
2008/04/25 PHP
Wordpress php 分页代码
2009/10/21 PHP
解析php mysql 事务处理回滚操作(附实例)
2013/08/05 PHP
ThinkPHP中的系统常量和预定义常量集合
2014/07/01 PHP
Yii+upload实现AJAX上传图片的方法
2016/07/13 PHP
PHP实现原生态图片上传封装类方法
2016/11/08 PHP
基于jQuery的星级评分插件
2011/08/12 Javascript
MultiSelect左右选择控件的设计与实现介绍
2013/06/08 Javascript
js判断横竖屏及禁止浏览器滑动条示例
2014/04/29 Javascript
JS创建对象几种不同方法详解
2016/03/01 Javascript
JavaScript中利用jQuery绑定事件的几种方式小结
2016/03/06 Javascript
js 实现数值的千分位及保存小数方法(推荐)
2016/08/01 Javascript
jQuery在header中设置请求信息的方法
2017/03/06 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
2020/03/28 Javascript
javascript 产生随机数的几种方法总结
2017/09/26 Javascript
JS实现的计数排序与基数排序算法示例
2017/12/04 Javascript
解决Vue axios post请求,后台获取不到数据的问题方法
2018/08/11 Javascript
JS+HTML5 Canvas实现简单的写字板功能示例
2018/08/30 Javascript
Javascript实现时间倒计时功能
2018/11/17 Javascript
利用PHP实现递归删除链表元素的方法示例
2020/10/23 Javascript
Vue如何循环提取对象数组中的值
2020/11/18 Vue.js
JavaScript实现10秒后再次获取验证码
2020/12/02 Javascript
[40:05]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第一局
2016/02/25 DOTA
[37:21]完美世界DOTA2联赛PWL S2 Inki vs Magma 第二场 11.22
2020/11/24 DOTA
Python enumerate遍历数组示例应用
2008/09/06 Python
Python打印斐波拉契数列实例
2015/07/07 Python
详解Python给照片换底色(蓝底换红底)
2019/03/22 Python
python绘制BA无标度网络示例代码
2019/11/21 Python
pandas factorize实现将字符串特征转化为数字特征
2019/12/19 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
2020/06/02 Python
怎样在程序里获得一个空指针
2015/01/24 面试题
求职信模板
2014/05/23 职场文书
优秀员工自荐书
2015/03/06 职场文书
刑事辩护词范文
2015/05/21 职场文书
windows server2008 开启端口的实现方法
2022/06/25 Servers