c++ - 基于 C++ 中的种子混淆字符串的代码?
问题描述
寻找获取 std::string 并对其进行混淆的技术,使用一个密钥,以便所有调用:
std::string obfuscate(const char *pInputStr, int minOutputLen, const char *pKeyStr);
*pInputStr
将是一个最多 40 个字符的字符串,我想将它映射到一个人类可读的minOutputLen
长度字符串。
具有相同输入的多个调用应返回相同的值。基本上是在寻找一种可以显示一组字符串的方法,并且根据我是否处于“混淆”模式,将对某些值进行编码,以便用户无法对该值进行逆向工程。
示例:假设我有一个结构:
class Person
{
public:
std::string FirstName;
std::string LastName;
std::string SSNumber;
}
我想做的是这样的:
int main()
{
Person p = {"Bob", "Needermyer", "12345678"};
std::cout << "Display without obfuscation" << std::endl;
std::cout << "First: " << p.FirstName << std::endl;
std::cout << "Last: " << p.LastName << std::endl;
std::cout << "SS: " << p.SSNumber << std::endl;
std::cout << "Display to user, but obfuscate the data" << std::endl;
char *pKey = "abcdefg";
std::cout << "First: " << obfuscate(p.FirstName, 10, pSeed) << std::endl;
std::cout << "Last: " << obfuscate(p.LastName, 10, pSeed) << std::endl;
std::cout << "SS: " << obfuscate(p.SSNumber, 10, pSeed) << std::endl;
}
输出如下:
Display without obfuscation
First: Bob
Last: Needermyer
SS: 12345678
Display to user, but obfuscate data
First: 4Tf7*f3f$r
Last: G9r3sfgvsr
SS: 9cd2832sd2
这将允许程序中的所有逻辑继续正常工作,但会改变数据的显示。
例如,我可以使用类似于 ROT13 的东西,但理想情况下是一种没有种子/密钥就无法进行逆向工程的算法。
解决方案
推荐阅读
- javascript - 从 CSS 径向渐变的顶行像素获取颜色值
- bash - 我的猜字游戏 shell 脚本有什么问题?
- php - 定义另一个实体属性时如何使用实体属性
- android - 如何解决 ionic3 文件传输中的 ssl 问题?
- python - 如何通过使用 numpy einsum 和 numexpr 计算核函数来提高性能?
- python - 如何在函数中减去全局变量
- c# - C# 是否有办法将双精度数组转换为类似于 C++ 转换为 char* 的字符串?
- javascript - 如何从量角器中使用 browser.executeScript 执行的 js 获取返回值?
- javascript - 如何在 React 中通过 ID 获取特定问题
- r - 当较大的行没有出现在文件的早期时,R data.table fread 无法以不规则的列长度读取