>

DES_ENCRYPT 로 해독하는 방법  c에서 openssl 를 사용하여  도서관. 나는 해독하는 다음 기능을 발견했으며 키의 길이가 8 바이트 일 때 잘 작동했습니다! 그러나 16 바이트 키를 사용하면 잘못된 값이 발생합니다!

int CBC_3Des_Decrypt(char *data, char *okey)
{
DES_key_schedule ks;
DES_cblock ivec = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
int i = 0;
int len = 0;
int nlen = 0;
unsigned char ch = '\0';
unsigned char *ptr = NULL;
unsigned char src[16] = {0};
unsigned char dst[16] = {0};
unsigned char block[8] = {0};
ptr = hex2bin(okey, strlen(okey), &nlen);
memcpy(block, ptr, 8);
free(ptr);
DES_set_key_unchecked((const_DES_cblock*)block, &ks);
len = strlen((char *)data);
ptr = hex2bin(data, len, &nlen);
len = (nlen / 8 + (nlen % 8 ? 1: 0)) * 8;
memcpy(src, ptr, len);
free(ptr);
ch = 8 - nlen % 8;
memset(src + nlen, ch, 8 - nlen % 8);
for (i = 0; i < len; i++) {
    TRACE(("%.2X", *(src + i)));
}
DES_ncbc_encrypt(src, dst, sizeof(src), &ks, &ivec, DES_DECRYPT);
for (i = 0; i < len; i++) {
    TRACE(("%.2X", *(dst + i)));
}
return 0;
}

16 바이트 키로이 라이브러리를 사용하여 어떻게 암호를 해독하거나 암호화 할 수 있습니까?


  • 답변 # 1

    전화 걸기 ( DES_ncbc_encrypt ) )는 3DES가 ​​아닌 DES 알고리즘입니다. 난 당신이 DES_ede3_cbc_encrypt 를 호출하려고 생각 .

    DES와 3DES ( "triple DES")를 혼동하지 않는 것이 중요합니다. 그것들은 관련 알고리즘이지만 동일하지는 않습니다. OpenSSL 내부에서 3DES는 일반적으로 EDE3이라고합니다. EDE3는 Triple DES를 구현하는 구체적인 방법이며 모든 사람들이 사용하는 방식이므로 실제로는 동의어입니다.

  • 이전 autohotkey Comparison of two volumes - 오토 핫키 - 두 볼륨의 비교 :결과 오류
  • 다음 regex - 파이썬 정규 표현식을 사용하여 텍스트에서 특정 patern 찾기