首页 > 解决方案 > 如何绕过散列(Crypto++ 库)中的 \x1a 字符(或类似字符)?

问题描述

我对编程比较陌生,这个项目是我在自己的时间做的最早的项目之一。

我基本上是在尝试制作一个登录注册程序,对用户输入的数据进行哈希处理并将其存储在文本文件中。登录选项基本上访问该文本文件并将其与用户输入的数据进行比较,以查看是否存在任何此类用户名和密码组合。注册选项基本上将用户数据写入文件。我对这个项目的了解并不多,因为我想在程序中添加更多的“功能”,这样它会更好地工作。但是,目前,我在从登录选项的文本文件中读取数据时遇到了一个小问题。基本上,存储在文本文件中的哈希密码之一包含\x1a作为其哈希的一部分。我认为程序总是在读取这个子控制字符时结束,因为它到达文件末尾。我想知道的是如何避免具有这种字符的哈希。

我正在使用 crypto++ 库(我不太熟悉它)。

哈希函数:

void hashingFunc(string originalPass, string& hashedPass) {

   using namespace CryptoPP;

   SHA3_256 hash;

   hash.Update((const byte*)originalPass.data(), originalPass.size());
   encryptedPass.resize(hash.DigestSize());
   hash.Final((byte*)&encryptedPass[0]);
   

}

读取功能:

void readFileFunc(fstream& outputFile, const string FILE_NAME, string userNameHash, string passWordHash) {
   string localUserHash;
   string localPassHash;


   if (!outputFile) {
      cout << "File containing login information failed to open. Please try again." << endl;
      cout << "If the problem persists, check file name and location." << endl;
      cout << "File Name in the system: " << FILE_NAME << endl;
   }
   else {
      while (outputFile) {
         if (outputFile.eof())
            break;

         getline(outputFile, localUserHash);
         getline(outputFile, localPassHash);

         if (localUserHash == userNameHash) {
            if (localPassHash == passWordHash) {
               cout << "Successful Login!" << endl;
            }

         }
      }

   }
}

标签: c++hash

解决方案


推荐阅读