异或加密算法

Posted BHY_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异或加密算法相关的知识,希望对你有一定的参考价值。

原理:

XOR加密利用了两次异或操作仍为原值的特性。通过一个密钥,将明文与密钥进行异或操作,从而对明文加密,解密时再将密文与密钥进行一次异或操作就能恢复出明文。

原字符串src_str,长度src_len

Base字符串base_str,长度base_len

Key字符串key_str,长度key_len

加密后字符串dst_str

基于base字符串生成key字符串,如果base_len小于等于src_len,则从base_str截取src_len的长度作为key字符串;如果base_len大于src_len,则将base_str循环生成src_len长度的key字符串。将原字符串与key字符串的对应字符异或处理,得到字符串dst_str,长度与原字符串相同。

例如:

Base字符串:abcdef

原字符串:dddd

则key字符串:abcd

Base字符串:abcdef

原字符串:啊啊啊啊

则key字符串:abcdefab

C++实现

std::string xorString(std::string baseStr, std::string keyStr) 
	int len = baseStr.length();
	std::string result;
	for (int i = 0; i < len; i++) 
		result += (baseStr[i] ^ keyStr[i]);
	
	return result;


std::string string_splice(std::string baseStr, int srcLen) 
	std::string result;
	int len = baseStr.length();
	for (int i = 0; i < srcLen; i++) 
		result += baseStr[i % len];
	
	return result;


int main()

	std::string baseStr = "abcdefg";
	std::string srcStr = "衙优涨桌";
	int srcLen = srcStr.length();
	std::string keyStr = string_splice(baseStr, srcLen);
	std::cout << xorString(srcStr, keyStr);  // 输出 啊啊啊啊

Oracle Sql实现

原字符串中含有中文,Oracle获取原字符串长度使用lengthb

UPDATE test_table SET test_field = utl_raw.cast_to_varchar2((UTL_RAW.BIT_XOR(RAWTOHEX(test_field), RAWTOHEX((SELECT RPAD('abcdef', lengthb(test_field), 'abcdef') FROM DUAL)))));

以上是关于异或加密算法的主要内容,如果未能解决你的问题,请参考以下文章

DELPHI 中INI文件加密还原的问题

AES加密算法原理

如何解密简单的异或加密

使用异或对图片数据进行加密.

DELPHI加密字串(异或运算加密)

java中异或加密