字符串与16位asc码转换
本帖最后由 CaptainBiken 于 2021-3-27 15:48 编辑背景:已知明文密文,暴力破解密钥。
进度:输入一组明文及密钥,可以输出一组密文(形式为一串asc码),问题是不知道如何将输出的这一组asc码同给出的asc码进行对比
列出问题函数:
void printASCCI(char *str, int len) {
int c;
for(int i = 0; i < len; i++) {
c = (int)*str++;
c = c & 0x000000ff;
printf("%02x", c);
}
printf("\n");
}
此函数作用好像是将加密后的密文字符串转换成16进制asc码,每个字符对应两位asc码。
求助大佬们,请问如何改动才能将转换后的这一串asc码与已知asc码进行对比?
本帖最后由 yuxijian2020 于 2021-3-28 00:53 编辑
是这样吗?
#include <stdio.h>
char* result;
void printASCCI(char* str, int len)
{
int c;
int single;
result = (char*)malloc(2 * len);
memset(result, 0, 2 * len);
for (int i = 0; i < len; i++)
{
c = (int)*str++;
c = c & 0x000000ff;
//这里就是一个字节一个字节的转成字符串
single = c >> 4;
if(single <= 0x9)
result = single + 0x30;
else
result = single + 0x37; //这里改成0x57就变成小写字母了
single = c & 0x0f;
if (single <= 0x9)
result = single + 0x30;
else
result = single + 0x37; //这里改成0x57就变成小写字母了
//我没有最后判断字符串结束后加'\0'
//而是每次加完2个字符之后立刻在后面补'\0'
result = '\0';
printf("%02x", c);
}
printf("\n");
}
int main()
{
char a[] = "abcdefghijklmn";
printASCCI(a, strlen(a));
printf_s("result = %s\n", result);
return 0;
}
页:
[1]