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中有趣在__call__函数
Jun 21 Python
Python中类型检查的详细介绍
Feb 13 Python
Python可变参数用法实例分析
Apr 02 Python
Python for循环生成列表的实例
Jun 15 Python
python3实现字符串的全排列的方法(无重复字符)
Jul 07 Python
对Python中Iterator和Iterable的区别详解
Oct 18 Python
Python如何调用JS文件中的函数
Aug 16 Python
Python3.7 读取 mp3 音频文件生成波形图效果
Nov 05 Python
在Django下创建项目以及设置settings.py教程
Dec 03 Python
Django 拼接两个queryset 或是两个不可以相加的对象实例
Mar 28 Python
解决在keras中使用model.save()函数保存模型失败的问题
May 21 Python
全网最详细的PyCharm+Anaconda的安装过程图解
Jan 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 IF ELSE简化/三元一次式的使用
2011/08/22 PHP
Php output buffering缓存及程序缓存深入解析
2013/07/15 PHP
php实现socket推送技术的示例
2017/12/20 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
Javascript注入技巧
2007/06/22 Javascript
jQuery EasyUI NumberBox(数字框)的用法
2010/07/08 Javascript
jQuery Clone Bug解决代码
2010/12/22 Javascript
jquery中获取id值方法小结
2013/09/22 Javascript
jQuery+ajax中getJSON() 用法实例
2014/12/22 Javascript
基于jquery实现省市联动效果
2015/11/23 Javascript
关于JavaScript限制字数的输入框的那些事
2016/08/14 Javascript
jQuery插件扩展操作入门示例
2017/01/16 Javascript
vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理
2017/03/06 Javascript
vue cli3.0结合echarts3.0与地图的使用方法示例
2019/03/26 Javascript
深入解析vue 源码目录及构建过程分析
2019/04/24 Javascript
vue路由拦截器和请求拦截器知识点总结
2019/11/08 Javascript
[03:55]2014DOTA2国际邀请赛 Fnatic经理采访赢DK在情理之中
2014/07/10 DOTA
Python和Ruby中each循环引用变量问题(一个隐秘BUG?)
2014/06/04 Python
python实现根据主机名字获得所有ip地址的方法
2015/06/28 Python
Python yield 使用方法浅析
2017/05/20 Python
python调用系统ffmpeg实现视频截图、http发送
2018/03/06 Python
numpy中的meshgrid函数的使用
2019/07/31 Python
Django中密码的加密、验密、解密操作
2019/12/19 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
2020/07/07 Python
关于老式浏览器兼容HTML5和CSS3的问题
2016/06/01 HTML / CSS
HTML5 层的叠加的实现
2020/07/07 HTML / CSS
GAP欧盟网上商店:GAP EU
2016/09/13 全球购物
匈牙利超级网上商店和优惠:Alza.hu
2019/12/17 全球购物
JD Sports丹麦:英国领先的运动时尚零售商
2020/11/24 全球购物
.net开发工程师面试题
2014/02/25 面试题
幼儿园英语教学反思
2014/01/30 职场文书
人民教师求职自荐信
2014/03/12 职场文书
实验室标语
2014/06/21 职场文书
用Python进行栅格数据的分区统计和批量提取
2021/05/27 Python
前端vue+express实现文件的上传下载示例
2022/02/18 Vue.js
微软发布Windows 11今年最大更新22H2(附 ISO 镜像官方下载)
2022/09/23 数码科技