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出现_warn_unsafe_extraction问题的方法
Mar 24 Python
Python实现数据库并行读取和写入实例
Jun 09 Python
python使用TensorFlow进行图像处理的方法
Feb 28 Python
selenium3+python3环境搭建教程图解
Dec 07 Python
Python multiprocessing多进程原理与应用示例
Feb 28 Python
python中列表的切片与修改知识点总结
Jul 23 Python
给你一面国旗 教你用python画中国国旗
Sep 24 Python
Python环境下安装PyGame和PyOpenGL的方法
Mar 25 Python
使用keras实现BiLSTM+CNN+CRF文字标记NER
Jun 29 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
Nov 28 Python
TensorFlow的环境配置与安装方法
Feb 20 Python
python基础之类方法和静态方法
Oct 24 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
开源SNS系统-ThinkSNS
2008/05/18 PHP
Yii2.0多文件上传实例说明
2017/07/24 PHP
PHP使用DOM对XML解析处理操作示例
2019/07/04 PHP
php数组指针函数功能及用法示例
2020/02/11 PHP
javascript一点特殊用法
2008/05/28 Javascript
关于JavaScript的with 语句的使用方法
2011/05/09 Javascript
js onload事件不起作用示例分析
2013/10/09 Javascript
js页面跳转的常用方法整理
2013/10/18 Javascript
jquery实现的网页自动播放声音
2014/04/30 Javascript
排序算法的javascript实现与讲解(99js手记)
2014/09/28 Javascript
js使用DOM设置单选按钮、复选框及下拉菜单的方法
2015/01/20 Javascript
JavaScript合并两个数组并去除重复项的方法
2015/06/13 Javascript
纯javascript实现四方向文本无缝滚动效果
2015/06/16 Javascript
基于Bootstrap使用jQuery实现输入框组input-group的添加与删除
2016/05/03 Javascript
javascript三种代码注释方法
2016/06/02 Javascript
yarn与npm的命令行小结
2016/10/20 Javascript
Javascript基础回顾之(一) 类型
2017/01/31 Javascript
AngularJS实现注册表单验证功能
2017/10/16 Javascript
Vue+webpack+Element 兼容问题总结(小结)
2018/08/16 Javascript
代码块高亮可复制显示js插件highlight.js+clipboard.js整合
2021/02/15 Javascript
matplotlib绘图实例演示标记路径
2018/01/23 Python
使用python实现mqtt的发布和订阅
2019/05/05 Python
Django中在xadmin中集成DjangoUeditor过程详解
2019/07/24 Python
基于CSS3的CSS 多栏(Multi-column)实现瀑布流源码分享
2014/06/11 HTML / CSS
原装进口全世界:天猫国际
2016/08/03 全球购物
英国最大的女性服装零售商:Dorothy Perkins
2017/03/30 全球购物
男女钓鱼靴和甲板鞋:XTRATUF
2021/01/09 全球购物
Java TransactionAPI (JTA) 主要包含几部分
2012/12/07 面试题
解释DataSet(ds) 和 ds as DataSet 的含义
2014/07/27 面试题
幼师岗位求职简历的自荐信格式
2013/09/21 职场文书
计算机专业毕业生的自我评价
2013/11/18 职场文书
生物专业个人自荐信范文
2013/11/29 职场文书
道路运输企业安全生产责任书
2014/07/28 职场文书
2014年药品销售工作总结
2014/12/16 职场文书
学生乘坐校车安全责任书
2015/05/11 职场文书
初中生物教学随笔
2015/08/15 职场文书