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编程中JSON模块的使用
Oct 15 Python
Python运行报错UnicodeDecodeError的解决方法
Jun 07 Python
Python正规则表达式学习指南
Aug 02 Python
通过Python爬虫代理IP快速增加博客阅读量
Dec 14 Python
Python文件常见操作实例分析【读写、遍历】
Dec 10 Python
Python 实现中值滤波、均值滤波的方法
Jan 09 Python
pytorch多GPU并行运算的实现
Sep 27 Python
pytorch中获取模型input/output shape实例
Dec 30 Python
Python autoescape标签用法解析
Jan 17 Python
Python中文分词库jieba,pkusegwg性能准确度比较
Feb 11 Python
Python matplotlib多个子图绘制整合
Apr 13 Python
Python序列化模块JSON与Pickle
Jun 05 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
珊瑚虫IP库浅析
2007/02/15 PHP
PHP学习 运算符与运算符优先级
2008/06/15 PHP
PHP 数据库树的遍历方法
2009/02/06 PHP
PHP新手NOTICE错误常见解决方法
2011/12/07 PHP
让PHP更快的提供文件下载的代码
2012/06/13 PHP
php实现文件编码批量转换
2014/03/10 PHP
ThinkPHP中自定义目录结构的设置方法
2014/08/15 PHP
PHP使用NuSOAP调用Web服务的方法
2015/07/18 PHP
详解 PHP加密解密字符串函数附源码下载
2015/12/18 PHP
php从数据库中读取特定的行(实例)
2017/06/02 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
jquery ui resizable bug解决方法
2010/10/26 Javascript
JavaScript通过字典进行字符串翻译转换的方法
2015/03/19 Javascript
JavaScript String(字符串)对象的简单实例(推荐)
2016/08/31 Javascript
QRCode.js:基于JQuery的生成二维码JS库的使用
2017/06/23 jQuery
ES6学习教程之Map的常用方法总结
2017/08/03 Javascript
详解node单线程实现高并发原理与node异步I/O
2017/09/21 Javascript
ES6 对象的新功能与解构赋值介绍
2019/02/05 Javascript
如何对react hooks进行单元测试的方法
2019/08/14 Javascript
vue图片加载失败时用默认图片替换的方法
2019/08/29 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
2019/10/10 Javascript
vue3+typeScript穿梭框的实现示例
2020/12/29 Vue.js
[01:04:01]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第一场
2014/05/24 DOTA
pycharm中连接mysql数据库的步骤详解
2017/05/02 Python
老生常谈python的私有公有属性(必看篇)
2017/06/09 Python
python实现二级登陆菜单及安装过程
2019/06/21 Python
pandas读取CSV文件时查看修改各列的数据类型格式
2019/07/07 Python
Python实现Restful API的例子
2019/08/31 Python
filter使用python3代码进行迭代元素的实例详解
2020/12/03 Python
alice McCALL官网:澳大利亚时尚品牌
2020/11/16 全球购物
Ajax主要包含了哪些技术
2014/06/12 面试题
专科毕业生自我鉴定
2013/12/01 职场文书
经理助理岗位职责
2015/02/02 职场文书
家属慰问信
2015/02/14 职场文书
2015年大学生实习评语
2015/03/25 职场文书
详解使用 CSS prefers-* 规范提升网站的可访问性与健壮性
2021/05/25 HTML / CSS