异或加密算法
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)))));
以上是关于异或加密算法的主要内容,如果未能解决你的问题,请参考以下文章