首页 > 解决方案 > 基于 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 的东西,但理想情况下是一种没有种子/密钥就无法进行逆向工程的算法。

标签: c++

解决方案


推荐阅读