3DES.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #pragma once
  2. #ifndef _3DES__H_
  3. #define _3DES__H_
  4. #ifdef __cplusplus
  5. extern "C"
  6. {
  7. #endif
  8. #define ENCRYPT 0
  9. #define DECRYPT 1
  10. #define ECB 0
  11. #define CBC 1
  12. #define KEY_LEN_8 8
  13. #define KEY_LEN_16 16
  14. #define KEY_LEN_24 24
  15. #define PAD_ISO_1 0
  16. #define PAD_ISO_2 1
  17. #define PAD_PKCS_7 2
  18. typedef char (*PSubKey)[16][48];
  19. /*解密后,将填充的字符去掉*/
  20. void RunRsm(char* Text);
  21. /*将48位的明文密钥转换成24的字符串密钥*/
  22. int CovertKey(char* iKey, char *oKey);
  23. /*******************************************************************
  24. 函 数 名 称: RunPad
  25. 功 能 描 述: 根据协议对加密前的数据进行填充
  26. 参 数 说 明: bType :类型:PAD类型
  27. In :数据串指针
  28. Out :填充输出串指针
  29. in_len :数据的长度
  30. padlen :(in,out)输出buffer的长度,填充后的长度
  31. 返回值 说明: char :是否填充成功
  32. *******************************************************************/
  33. int RunPad(int nType,const char* In,unsigned in_len,char* Out,int* padlen);
  34. /*******************************************************************
  35. 函 数 名 称: Run1Des
  36. 功 能 描 述: 执行单DES算法对文本加解密
  37. 参 数 说 明: bType :类型:加密ENCRYPT,解密DECRYPT
  38. bMode :模式:ECB,CBC
  39. In :待加密串指针
  40. in_len :待加密串的长度,同时Out的缓冲区大小应大于或者等于in_len
  41. Key :密钥(可为8位,16位,24位)支持3密钥
  42. key_len :密钥长度,多出24位部分将被自动裁减
  43. Out :待输出串指针
  44. out_len :输出缓存大小
  45. cvecstr :8字节随即字符串
  46. 返回值 说明: int :是否加密成功,1:成功,0:失败
  47. *******************************************************************/
  48. int Run1Des(int bType, int bMode, const char *In, unsigned int in_len, const char *Key, unsigned int key_len, char* Out, unsigned int out_len, const char cvecstr[8]);
  49. /*******************************************************************
  50. 函 数 名 称: Run3Des
  51. 功 能 描 述: 执行3DES算法对文本加解密
  52. 参 数 说 明: bType :类型:加密ENCRYPT,解密DECRYPT
  53. bMode :模式:ECB,CBC
  54. In :待加密串指针
  55. in_len :待加密串的长度,同时Out的缓冲区大小应大于或者等于in_len
  56. Key :密钥(可为8位,16位,24位)支持3密钥
  57. key_len :密钥长度,多出24位部分将被自动裁减
  58. Out :待输出串指针
  59. out_len :输出缓存大小
  60. cvecstr :8字节随即字符串
  61. 返回值 说明: int :是否加密成功,1:成功,0:失败
  62. 作 者: huangjf
  63. 更 新 日 期: 2009.6.17
  64. 3DES(加密) = DES(key1, 加密) DES(key2, 解密) DES(key3, 加密)
  65. 3DES(解密) = DES(key3, 解密) DES(key2, 加密) DES(key1, 解密)
  66. 每个KEY为64位,总共可以有192位的KEY, 但一般都只使用128位的key
  67. 如果只用128位密钥,则key3 = key1
  68. *******************************************************************/
  69. int Run3Des(int bType, int bMode, const char *In, unsigned int in_len, const char *Key, unsigned int key_len, char* Out, unsigned int out_len, const char cvecstr[8]);
  70. /*******************************************************************
  71. 函 数 名 称: Crypt3Des
  72. 功 能 描 述: 实现3DES的加解密
  73. 参 数 说 明: type :类型:加密ENCRYPT,解密DECRYPT
  74. in :待加密串指针或者待解密的密码字符串指针
  75. Out :加密后的密码或者解密后的明文
  76. Key :密钥(48位的ASCII字符串)
  77. 返回值 说明:
  78. 0:成功
  79. -1:非法的密钥长度
  80. -2:密钥含有非16进制字符
  81. -3:明文填充失败
  82. -4:加解密失败
  83. -5:非法的操作类型
  84. *******************************************************************/
  85. int Crypt3Des(int type,char* in,char* key,char* out);
  86. char *Base64Encode(char *src, int srclen);
  87. char *Base64Decode(char *src);
  88. unsigned char GetByte(char *s);
  89. #ifdef __cplusplus
  90. }
  91. #endif
  92. #endif