用python 实现XOR 加密解密的方法
🕛 by pyList at 2017-02-22 11:08
这篇文章介绍 XOR 加密解密及 python 实现方法
XOR运算
XOR
运算,中文称为“异或运算”。
它的定义是:两个值相同时,返回false,否则返回true。也就是说,XOR可以用来判断两个值是否不同。
对应的真值表如下:
XOR 运算有一个很奇妙的特点:如果对一个值连续做两次 XOR,会返回这个值本身。
// 第一次 XOR
1010 ^ 1111 // 0101
// 第二次 XOR
0101 ^ 1111 // 1010
加密过程
从上面的真值表中可以看出,我们可以取右操作数(左操作数)当做加密密钥,记为key,取左操作数(右操作数)作为待加密文本,记为message。
- 前提:首先得确保通信发送方和通信接收方都存储了相同的key;
- 加密:通信发送方将message与key作一次异或运算(message XOR key)后就可以得到一段加密文本(encyptedMessage)。我们就可以通过在网络中传输这段加密文本,就保证了我们的消息在网络传输过程中的安全性,因为如果别有用心的人通过一定手段从网络中截取我们的通信文本,拿到的也只是encyptedMessage,由于没有key,该别有用心的人是无法读懂这段encyptedMessage的;
- 解密:通信接收方收到通信发送方的encyptedMessage后,将encyptedMessage与key再次进行异或运算就可以得到通信发送方本来想发送的文本message,从而读懂通信发送方的意图。
XOR 加密的python实现
def xor_crypt_string(data, key='awesomepassword', encode=False, decode=False):
from itertools import izip, cycle
import base64
if decode:
data = base64.decodestring(data)
xored = ''.join(chr(ord(x) ^ ord(y)) for (x,y) in izip(data, cycle(key)))
if encode:
return base64.encodestring(xored).strip()
return xored
secret_data = "239054"
print xor_crypt_string(secret_data, encode=True)
print xor_crypt_string(xor_crypt_string(secret_data, encode=True), decode=True)
注意问题
最关键的KEY不能泄露.
本文网址: https://pylist.com/t/1487732894 (转载注明出处)
如果你有任何建议或疑问可以在下面 留言
发表第一条评论!
相关推荐
小工具
标签
sae
python
gzip
开启
方法
天干地支
获取
一年
文件类型
magic
从文件
判断
pil
image
高质量
ubuntu
多线程
监听
变量
list
按键
排序
高效
golang
模版
缓存
linux
engine
app
google
xmltodict
gbk
xml
编码
openwrt
usb
上网卡
共享
网络
解析
电子书
信息
u盘
mac
diskutil
格式化
顽固
文件
wkwebview
ios
载入
灵活
bbr
路由
cjson
lua
module
错误
解决
国内
md5
计算
os
popen
超时
老旧
服务器
笔记本
改造
记录
低功耗
web
爬虫
组装
nginx
上传
中断
默认值
struct
设置
之坑
files
open
服务
身份验证
authenticator
迁移
手机
webdriver
微博
selenium
登录
自动更新
microsoft
关闭
store
未知
静音
风扇
主机
微信
尝鲜
视频
体验
cpu
debian
查看
温度
chrome
server
浏览
gnu
安装
系统启动
固件
编译
宅家
坑记
屏幕
动手
硬件加速
ubnt
er
quic
抢先
useragent
搜索引擎
蜘蛛
真假
识别
最近发表
- Mac 关闭 Microsoft 自动更新
- Mac 登录 App Store 出现“发生了未知错误”的解决方法
- 老笔记本改造为无风扇静音主机方案
- 自己组装21瓦低功耗家庭爬虫、文件、web服务器
- 微信视频号尝鲜体验
- Ubuntu/Debian 查看CPU温度的方法
- 在Ubuntu/debian Server 系统使用Chrome 无头浏览模式
- 换手机后 Google 身份验证器 Google Authenticator 数据迁移的简单方法
- 使用Golang selenium WebDriver 自动登录微博
- 在 Ubuntu 或其它 GNU/Linux 系统下安装 Debian
- Mac 下制作 USB ubuntu/debian 系统启动、安装盘的几种方法
- ubuntu/debian 下自行编译 OpenWRT 固件
- 宅家自己动手换手机屏幕掉坑记
- 路由 UBNT ER-X 官方固件升级及开启硬件加速的方法
- 在 Nginx 和 Golang web 上抢先体验 QUIC
- 从UserAgent识别搜索引擎并判断真假蜘蛛
最近浏览
- Openwrt 使用USB 4G 上网卡共享网络
- python 解析电子书的信息
- 在终端使用Mac diskutil 命令格式化顽固U盘
- IOS WKWebView 灵活载入本地文件和网络文件
- Openwrt 路由上开启BBR
- 出现 lua module 'cjson' not found 错误的解决方法
- OpenWrt 国内源
- golang 计算大文件md5
- python 解决os.popen 超时问题
- 把老旧笔记本改造为家庭服务器过程记录
- 自己组装21瓦低功耗家庭爬虫、文件、web服务器
- Nginx 服务器上传大文件经常中断的解决方法
- go struct 设置默认值
- Golang 服务之坑:too many open files
- 换手机后 Google 身份验证器 Google Authenticator 数据迁移的简单方法
- 使用Golang selenium WebDriver 自动登录微博