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实现代理服务功能实例
Nov 15 Python
python实现dict版图遍历示例
Feb 19 Python
Windows系统下安装Python的SSH模块教程
Feb 05 Python
python3制作捧腹网段子页爬虫
Feb 12 Python
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
Jan 07 Python
Python异常对代码运行性能的影响实例解析
Feb 08 Python
Python合并多个Excel数据的方法
Jul 16 Python
用Python实现大文本文件切割的方法
Jan 12 Python
tensorflow ckpt模型和pb模型获取节点名称,及ckpt转pb模型实例
Jan 21 Python
如何在keras中添加自己的优化器(如adam等)
Jun 19 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
Jul 07 Python
Python Matplotlib绘图基础知识代码解析
Aug 31 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
一个从别的网站抓取信息的例子(域名查询)
2006/10/09 PHP
jQuery中的RadioButton,input,CheckBox取值赋值实现代码
2014/02/18 PHP
对PHP PDO的一些认识小结
2015/01/23 PHP
功能强大的PHP POST提交数据类
2016/07/15 PHP
PHP实现限制IP访问及提交次数的方法详解
2017/07/17 PHP
jquery 输入框数字限制插件
2009/11/10 Javascript
addEventListener和attachEvent二者绑定的执行函数中的this不相同
2012/12/09 Javascript
js前台分页显示后端JAVA数据响应
2013/03/18 Javascript
JS正则表达式验证数字代码
2014/01/28 Javascript
JavaScript中isPrototypeOf函数作用和使用实例
2015/06/01 Javascript
js获取元素的外链样式的简单实现方法
2016/06/06 Javascript
浅谈如何实现easyui的datebox格式化
2016/06/12 Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
2016/10/10 Javascript
angularJS 发起$http.post和$http.get请求的实现方法
2017/05/18 Javascript
node.js中express中间件body-parser的介绍与用法详解
2017/05/23 Javascript
vue2.0组件之间传值、通信的多种方式(干货)
2018/02/10 Javascript
详解js访问对象的属性和方法
2018/10/25 Javascript
用VueJS写一个Chrome浏览器插件的实现方法
2019/02/27 Javascript
vue路由守卫+登录态管理实例分析
2019/05/21 Javascript
JS中getElementsByClassName与classList兼容性问题解决方案分析
2019/08/07 Javascript
使用Vue-scroller页面input框不能触发滑动的问题及解决方法
2020/08/08 Javascript
[47:43]完美世界DOTA2联赛PWL S3 Magama vs GXR 第二场 12.19
2020/12/24 DOTA
python同时给两个收件人发送邮件的方法
2015/04/30 Python
详解python的ORM中Pony用法
2018/02/09 Python
将python文件打包成EXE应用程序的方法
2019/05/22 Python
PyCharm中Matplotlib绘图不能显示UI效果的问题解决
2020/03/12 Python
Python基于class()实现面向对象原理详解
2020/03/26 Python
Html5页面中的返回实现的方法
2018/02/26 HTML / CSS
幼儿教师自我鉴定
2013/11/02 职场文书
土木工程毕业生自荐信
2013/11/12 职场文书
政治表现评语
2014/05/04 职场文书
物理系毕业生自荐书
2014/06/13 职场文书
我的中国梦演讲稿300字
2014/08/19 职场文书
论群众路线学习笔记
2014/11/06 职场文书
2015商场元旦促销活动策划方案
2014/12/09 职场文书
Android Rxjava3 使用场景详解
2022/04/07 Java/Android