首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

3DES 加密 C 語言實現:24 位密鑰(168 位)正確使用方法

     編輯:程式設計綜合問答

背景

3DES(Triple DES)標準密鑰長度為 168 位(24 字節),分為三個 56 位子密鑰(K1, K2, K3)。常見開源實現(如 OpenSSL)直接接受 24 字節密鑰。

關鍵點

  • 密鑰格式:24 字節 = K1(8) || K2(8) || K3(8)。每字節第 8 位為奇校驗位,實際有效 56 位。
  • 加密模式:通常使用 CBC 模式,需 8 字節 IV(初始向量)。
  • 填充方式:PKCS#5/PKCS#7(填充到 8 字節倍數)。

OpenSSL 示例代碼

#include 
#include 

void des3_encrypt(const unsigned char *key24, const unsigned char *iv8,
                  const unsigned char *in, int in_len, unsigned char *out) {
    DES_key_schedule ks1, ks2, ks3;
    DES_cblock *key = (DES_cblock *)key24;
    DES_set_key_unchecked(&key[0], &ks1);
    DES_set_key_unchecked(&key[1], &ks2);
    DES_set_key_unchecked(&key[2], &ks3);
    DES_ede3_cbc_encrypt(in, out, in_len, &ks1, &ks2, &ks3, (DES_cblock *)iv8, DES_ENCRYPT);
}

void des3_decrypt(const unsigned char *key24, const unsigned char *iv8,
                  const unsigned char *in, int in_len, unsigned char *out) {
    DES_key_schedule ks1, ks2, ks3;
    DES_cblock *key = (DES_cblock *)key24;
    DES_set_key_unchecked(&key[0], &ks1);
    DES_set_key_unchecked(&key[1], &ks2);
    DES_set_key_unchecked(&key[2], &ks3);
    DES_ede3_cbc_encrypt(in, out, in_len, &ks1, &ks2, &ks3, (DES_cblock *)iv8, DES_DECRYPT);
}

密鑰示例

1234567812345678ABCDEFGH(24 字符 ASCII,直接作為 24 字節密鑰)。

參考資源

CSDN 下載:3DES C語言完整示例

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved