CaptainBiken 发表于 2021-3-27 15:23:10

字符串与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-27 16:45:13

本帖最后由 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]
查看完整版本: 字符串与16位asc码转换