【发布时间】:2017-03-13 16:26:54
【问题描述】:
我有两个无符号字符数组和一个字符数组。我想对两个 unsigned char 数组进行异或运算,然后加入一个 char 数组。
char mensaje[] = "A";
unsigned char key[] = "61181d3cfd91b0cc0890c2c0646c94f692b311ffbf93749c0aadd8ae6f04f044";
test(key, mensaje)
void test(unsigned char key[],char mensaje[]){
unsigned char pad_exterior[64];
unsigned char pad_interior[64];
for(int i =0 ; i<64; i++ ){
pad_exterior[i]= 0x5c ^ key[i];
pad_interior[i]= 0x36 ^ key[i];
}
char * result = new char[strlen(mensaje)+ 64];
copy(mensaje, mensaje + strlen(mensaje), result);
copy(pad_interior, pad_interior + 64, result + strlen(mensaje));
char * result2 = new char[strlen(mensaje)+ 64];
copy(mensaje, mensaje + strlen(mensaje), result2);
copy(pad_exterior, pad_exterior + 64, result2 + strlen(mensaje));
}
问题是,最后,strlen(pad_exterior) = 65 但 strlen(pad_interior) =1。
但是,如果我替换
pad_interior[i]= 0x36 ^ key[i];
与
pad_interior[i]= 0x36;
确实有效。
为什么会有这种奇怪的行为? 有没有更好的方法来完成我想做的事情?我已经尝试了十几种方法来复制数组。
编辑: 我想我需要 char 数组,因为我打电话给EVP_DigestUpdate。 测试函数基本上只是 xor 并加入数组。 调用在代码开头
【问题讨论】:
-
这个
test函数怎么称呼?您能尝试创建一个Minimal, Complete, and Verifiable Example 并展示给我们看吗?此外,如果您使用 C++ 编程,请不要添加 C 标记。 -
另外,
strlen(mensaje)将永远是1。如果您使用 C++ 编程,为什么要使用简单数组而不是std::string和std::vector? -
检查
0x36 ^ '6'的值。 -
我已经编辑了问题。
-
您可能还缺少将密钥从十六进制数字字符串形式转换为实际字节的步骤。
标签: c++