所以我做了一个基本的异或加密程序,它要求输入密码字符串并用它来播种ISAAC
然后它要求对字符串进行加密,并将其与 ISAAC 的输出进行异或。出于某种原因,这会为相同的两个字符串产生不稳定的结果。这是我的代码的问题,还是它被输出到控制台?我是否正在做一些事情让它变得非常明显?这是我的代码,我使用的是 ISAAC 网站上提供的模板类:
#include <iostream>
#include <cstdlib>
using std::malloc;
using std::free;
#include "isaac.hpp"
#include <time.h>
#include <cmath>
#include <string>
#include <sstream>
using namespace std;
QTIsaac<8,int> derp;
char trand(){
int rando=0;
rando=derp.rand();
rando=abs(rando);
rando=rando%256;
char re=rando;
return re;
}
int main()
{
cout << "What is your password string?\n";
string get;
getline(cin,get);
int length=get.size();
int seedWithMe[length];
for(int i=0;i<length;i++){
seedWithMe[i]=(int)get[i];
}
derp.srand(1,1,1,seedWithMe);
cout << "What is your string to be encrypted? \n";
getline(cin,get);
length=get.size();
char table[length];
char table3[length];
for(int i=0;i<length;i++){
table[i]=trand();
}
for(int i=0;i<length;i++){
table3[i]=(char)table[i]^(char)get[i];
}
cout << table3 << "\n";
return 0;
}
编辑:没关系,所有这些只是我愚蠢
所以我尝试了 David Schwartz 给我的修复方法,但是当我尝试对密码进行哈希处理时,它又停止工作了。我用来散列输入字符串的函数是:
string shaOfPass(string digestThis){ string digest; CryptoPP::SHA256 hash;
CryptoPP::StringSource foo(digestThis, true, new CryptoPP::HashFilter(hash, new CryptoPP::HexEncoder ( new CryptoPP::StringSink(digest)))); return digest; } And this code results in inconstant output:
cout << "What is your password string?\n"; string get; getline(cin,get); string hashOfPass=shaOfPass(get); int seedWithMe[256]; for(int i=0;i<256;i++){ seedWithMe[i]=(int)get[i%256]; }