异或加密原理

加密原理

因为:
1. A xor B xor C = (A xor B) xor C = A xor (B xor C)
2. A xor B xor B = A

所以有:
A xor B xor B = (C= A xor B) xor B = C xor B = A

公开加密后的值C,保留key Bc xor B 得到原始数据A

#PYTHON 2.7
#coding: utf-8
‘‘‘
xor operator lab
‘‘‘

def xor_encode(original,key):
    ‘‘‘
    function:   异或加密
    original:   原始字符
    key:        异或表
    return:     加密后的字符串
    ‘‘‘
    encoded=[]
    for i in range(len(original)):
        encode_chr = chr( ord( original[i] ) ^ key[i] )
        encoded.append(encode_chr)
    return ‘‘.join(encoded)

def xor_decode(fakeStr,key):
    ‘‘‘
    function: 疑惑解密
    fakeStr:  待解密字符
    key:      异或表
    return:   解密后的字符串
    ‘‘‘
    decoded=[]
    for i in range( len( fakeStr ) ):
        decode_chr = chr( ord( fakeStr[i] ) ^ key[i] )
        decoded.append(decode_chr)
    return ‘‘.join( decoded )

def create_keyList(start,len):
    ‘‘‘
    function: 创建KeyList
    start:     第一个key值
    len:       与待解密字符串长度一致
    return:   创建好的KeyList
    ‘‘‘
    keyList=[]
    for i in range(len):
        keyList.append(start+i)
    return keyList

def strtoHex(str):
    ‘‘‘
    function: 将字符串转化为16进制字符串
    str:      待转换字符串 like ‘AAAA‘
    return:   转换后的字符串 like ‘41414141‘
    ‘‘‘
    return str.encode(‘hex‘)

def HextoStr(hexStr):
    ‘‘‘
    function: 将16进制字符串转为可打印字符串
    hexStr:   待转化字符串 like ‘42424242‘不带前缀0x之类
    return :  转化后的字符串  like ‘BBBB‘
    ‘‘‘
    return hexStr.decode(‘hex‘)

def rmPrefix(str,prefix):
    ‘‘‘
    function: 为16进制字符串去掉如‘0x,/x,\x, ‘等前缀
    str:      含前缀的字符串
    prefix:    前缀标志
    return:    去掉前缀的字符串
    ‘‘‘
    lStr=[]
    lStr = str.split(prefix)
    return ‘‘.join(lStr)

#usage:

ori="welcome to here"
keylist=create_keyList(0x70,len(ori))

decoded= xor_encode(ori,keylist)
print decoded
real=xor_decode(decoded,keylist)
print real

#辅助功能
hex_code=strtoHex(decoded)
print hex_code

#when you can‘t copy the un-printed code, so using the hex-str
decode_str=HextoStr(hex_code)
print decode_str

#when using od
noPre_str=rmPrefix("00 D0 00 00 00 00 FC 77 00 10 00 00 00 02 00 00",‘ ‘ )
print HextoStr(noPre_str)

OUTPUT

异或加密的,关键是在key Table 上,如果在程序中明文存放key数组 ,那么加密形同虚设。

若识别出来异或加密函数,则可用脚本跑出。

时间: 2024-08-01 23:10:18

异或加密原理的相关文章

RC4加密原理

加密原理:1 , 通过密钥调度算法KSA初始化状态矢量S(S就是一个随机数发生器,称为S-box) 2 , 再通过伪随机数生成算法PRGA得到密钥流keystream3 , 密钥流keystream 与明文进行xor运算得到密文,解密用 密钥流与密文xor 1. KSA RC4首先使用密钥调度算法(KSA)来完成对大小为256的字节数组S(s-box)初始化及替换.在替换时使用密钥.其密钥长度一般取5~16字节,即40~128位,也可以更长,通常不超过256位.首先用0~255初始化数组S,然后

浅谈远程登录时,ssh的加密原理

SSH:Secure Shell,是一种网络安全协议,主要用于登录远程计算机的加密过程. 登录方式主要有两种: 1.基于用户密码的登录方式:   加密原理:   当服务器知道用户请求登录时,服务器会把自己的公钥发给用户,ssh会将服务器的公钥存放在客户端的~/.ssh/known_hosts文件下,用户会根据服务器给它发的公钥进行加密,加密好好之后返回给服务器,服务器用自己的私钥解密,如果密码正确,则用户会成功登录到服务器上. 如果服务器改变了自己的公钥,客户端想要登录时必须删除自己~/.ssh

谈谈异或加密

0. 前言 本文包括如下几个内容: 异或算法 异或加密 两个整数交换问题 1. 异或算法 异或是数字逻辑中的基本概念,也是每种编程语言都支持的基本运算.基本原理就是,对于数字1和0有如下的运算公式: 1 ^ 1 = 0 0 ^ 0 = 0 1 ^ 0 = 1 0 ^ 1 = 1 很自然地,这个运算可以扩展到一长串码流上. 更常见的是字节一级或整数的异或运算,可以参考相应的编程语言的相关介绍. 2. 异或加密 异或加密是最简单的一种加密方法,简单来讲,假定有一串码流A,然后可以用key进行加密,把

lua简单地异或加密文件

用lua简单地异或加密文件,注意解密的key是加密key的倒序: 1 require 'bit' 2 3 local encode = function(inpath, outpath, key) 4 local inf = assert(io.open(inpath, "rb")) 5 local outf = assert(io.open(outpath, "wb")) 6 7 if (type(key) ~= "string") or (s

Java实现异或加密

/** * 异或加密 * * @param strOld * 源字符串 * @param strKey * 密钥 * @return 加密后的字符串 */ public static String encrypt(String strOld, String strKey) { byte[] data = strOld.getBytes(); byte[] keyData = strKey.getBytes(); int keyIndex = 0; for (int i = 0; i < strO

密码学——网间数据加密传输全流程(SSL加密原理)

0.导言 昨天写了一篇关于<秘钥与公钥>的文章,写的比较简单好理解,有点儿像过家家,如果详细探究起来会有不少出入,今天就来详细的说明一下数据加密的原理和过程.这个原理就是大名鼎鼎SSL的加密原理,哦,对了,有人说上个月SSL刚爆出本年度最轰动的漏洞"心脏滴血",可能危及全球好多互联网企业,那这个东西靠谱吗?其实,爆出漏洞的是SSL的一款产品openssl,是程序员编码时候的失误,是程序上的漏洞,而非SSL原理上出现了问题,所以SSL还是靠谱的,HTTP协议还是需要它来保护,

wordpress用户密码加密原理及其算法分析

     享元模式,运用共享技术有效的支持大量细粒度的对象. FlyweightFactory,一个享元工厂,用来创建并管理Flyweight对象.它主要是用来确保合理的共享Flyweight,当用户请求一个Flyweight时,FlyweightFactory对象提供一个已创建的实例或者创建一个(如果不存在的话). Flyweight类,所有具体享元类的超类或接口,通过这个接口,Flyweight可以接受并作用于外部状态. ConcreteFlyweight类,继承Flyweight超类或实现

字符串异或加密

/** *  字符串异或加密 * *  @param oldStr 被加密的字符串 *  @param x      字符偏移量 * *  @return 加密后的字符串 */ - (NSString *)getCharArrayUsingString:(NSString *)oldstr withCharOffset:(int)x { if (nil == oldstr || [@"" isEqualToString:oldstr]) { return @"";

SSH加密原理、RSA非对称加密算法学习与理解

首先声明一下,这里所说的SSH,并不是Java传统的三大框架,而是一种建立在应用层和传输层基础上的安全外壳协议,熟悉Linux的朋友经常使用到一 个SSH Secure Shell Cilent的工具,本文也是基于此工具加密原理的学习,在SSH的加密原理中,使用到了RSA非对称加密算法,本文也一并做了学习和了解. 非对称加密算法 在日常的工作生产中, 我们经常需要进行数据的通讯,开发人员经常需要对数据进行加解密操作,以保证数据的安全.数据的加密算法非为对称加密和非对称加密两种,常用的DES.三