我的纯文本首先转换为二进制文本,然后应分为64位块,并且密钥必须分别加密tese块。例如,如果我的文本有90位,则应在其后加上零,以使其具有128位。我不知道该怎么做。这是我的代码:
string ifile = "filetxt.txt";
string ofile = "file2.txt";
string key = "keywordd";
vector<int> k;
vector<int> txt;
char text;
vector<int> o;
int i;
int c = 0;
int d = 1;
void f() {
ifstream ist ("filetxt.txt");
ofstream ost ("file2.txt");
int a[64], i;
while (ist >> text) {
for(char& text : key) {
for(i=0; i < 8; i++){
a[i] = text%2;
text = text/2;
}
for(i=i-1; i >= 0 ;i--){
k.push_back(a[i]);
}
}
if (ist) {
for(i=0; i < 8; i++){
a[i] = text%2;
text = text/2;
}
for(i=i-1 ;i >= 0 ;i--){
txt.push_back(a[i]);
}
for(int j = 0; j < 8; j++) {
if(k[j] == txt[j]) {
o.push_back(c);
} else if (k[j] != txt[j]) {
o.push_back(d);
}
}
for(i=0; i<8; i++) {
ost << o[i];
}
for(i=0; i<8; i++) {
cout << o[i];
}
}
}
cout << endl;
for(i=0; i<64; i++) {
cout << k[i];
}
cout << endl;
for(i=0; i<64; i++) {
cout << txt[i];
}
}
int main()
{
f();
return 0;
}
我要做这样的事情:
if (txt.size()< 64){
for(i= 0; i< 64- txt.size();i++){
txt.push_back(c);
}
}
我认为问题出在txt矢量中,因为如果我要打印它,我
答案 0 :(得分:3)
这很简单:
if (txt.size()< 64)
txt.resize(64);
这将简单地将向量填充为int
的默认值,即0。
如果您想要一个非0的值(如代码建议的c
),则为:
if (txt.size()< 64)
txt.resize(64, c);
答案 1 :(得分:2)
您想要的是https://www.tutorialgateway.org/ssis-xml-task-to-transform-xml-file-using-xslt/。默认情况下,它将向量的大小增加到所请求的大小(如果向量小于该大小),并且添加的任何元素都将被值初始化,这对于int
而言意味着零初始化。那给你
if (txt.size() % 64 != 0)
txt.resize(txt.size() + (64 - (txt.size() % 64)));
还要注意,64个int
不是64位。 int
的大小必须至少为16位,这意味着其中的64位将至少为512位。如果您确实需要64位块,则应使用std :: uint64_t作为位块(或类似的东西)
答案 2 :(得分:1)
在最后一步中执行以下操作:
if ((txt.size() % 64) != 0){
for(i= 0; i< 64-((txt.size() % 64)); i++){
txt.push_back(c);
}
}
这样,无论您的纯文本长度是多少,txt
向量都将始终以64的倍数结尾,并在必要时填充零(c
)。