求支持多线程的des算法

可爱的小莱 2012-11-26 11:59:47
求支持多线程的des算法,现在用的算法不支持多线程。

//------------------------------------ .h 头文件------------------------------
#pragma once

#include "stdafx.h"



/* Flags controlling SingleDesOperation() */
#define DO_INITIAL_DES_PERMUTATION 0x10
#define DES_ENCRYPTION_MODE 0x20
#define DES_DECRYPTION_MODE 0
#define DO_FINAL_DES_PERMUTATION 0x40

#define DES_ENCRYPT_BLOCK (DO_INITIAL_DES_PERMUTATION|DES_ENCRYPTION_MODE|DO_FINAL_DES_PERMUTATION )
#define DES_DECRYPT_BLOCK (DO_INITIAL_DES_PERMUTATION|DES_DECRYPTION_MODE|DO_FINAL_DES_PERMUTATION )

/* Flags controlling CombinedDesOperation() */
#define ZERO_CBC_IV 0x10000000L
#define CBC_ENCRYPTION 0x20000000L
#define CBC_DECRYPTION 0

#define SINGLE_DES_ENCRYPTION (CBC_ENCRYPTION|DES_ENCRYPT_BLOCK|0x1)
#define SINGLE_DES_DECRYPTION (CBC_DECRYPTION|DES_DECRYPT_BLOCK|0x1)

#define TRIPLE_DES_ENCRYPTION_E1D2E1 (CBC_ENCRYPTION|DO_INITIAL_DES_PERMUTATION | DES_ENCRYPTION_MODE|0x1L | ((DES_DECRYPTION_MODE|0x2L)<<8) | ((DES_ENCRYPTION_MODE|DO_FINAL_DES_PERMUTATION|0x1L)<<16))
#define TRIPLE_DES_DECRYPTION_D1E2D1 (CBC_DECRYPTION|DO_INITIAL_DES_PERMUTATION | DES_DECRYPTION_MODE|0x1L | ((DES_ENCRYPTION_MODE|0x2L)<<8) | ((DES_DECRYPTION_MODE|DO_FINAL_DES_PERMUTATION|0x1L)<<16))
#define TRIPLE_DES_ENCRYPTION_E1D2E3 (CBC_ENCRYPTION|DO_INITIAL_DES_PERMUTATION | DES_ENCRYPTION_MODE|0x1L | ((DES_DECRYPTION_MODE|0x2L)<<8) | ((DES_ENCRYPTION_MODE|DO_FINAL_DES_PERMUTATION|0x3L)<<16))
#define TRIPLE_DES_DECRYPTION_D3E2D1 (CBC_DECRYPTION|DO_INITIAL_DES_PERMUTATION | DES_DECRYPTION_MODE|0x3L | ((DES_ENCRYPTION_MODE|0x2L)<<8) | ((DES_DECRYPTION_MODE|DO_FINAL_DES_PERMUTATION|0x1L)<<16))

class DES
{

public:
// _____________________________________________________________________________
//
// FUNCTION: SingleDesOperation
// IN: *plaintext: 8 bytes data to be encrypt/decrypt
// plaintext[0] .. MSByte
// plaintext[7] .. LSByte
// *key: 8 bytes key for encrypt/decrypt
// key[0] .. MSByte
// key[7] .. LSByte
// mode: 8 bits = xFEIxxKK
// F = Do Final Des Permutation
// E = Des Encryption Mode (1=Encrypt)
// I = Do Initial Des Permutation
// KK = Key Number (1 to 3)
// OUT: *plaintext 8 bit encrypted/decrypted data
// plaintext[0] .. MSByte
// plaintext[7] .. LSByte
// RETURN:
static void SingleDesOperation (unsigned char *plaintext, unsigned char *key, unsigned char mode);

// _____________________________________________________________________________
//
// FUNCTION: CombinedDesOperation
// IN: *pvInOutputBlock: 8 bytes data to be encrypt/decrypt
// pvInOutputBlock[0] .. MSByte
// pvInOutputBlock[7] .. LSByte
// *pvCbcBlock: 8 bytes value for CBC mode xor
// pvCbcBlock[0] .. MSByte
// pvCbcBlock[7] .. LSByte
// *pbKeyString: 8 or 16 bytes key for encrypt/decrypt
// key[0] .. key1 MSByte
// key[7] .. key1 LSByte
// key[8] .. key2 MSByte
// key[15] .. key2 LSByte
// eDesMode: Des operating mode (3DES or Single DES)
// 32 bits => xxCZxxxx xFEIxxKK xFEIxxKK xFEIxxKK
// F = Do Final Des Permutation
// E = Des Encryption Mode (1=Encrypt)
// I = Do Initial Des Permutation
// KK = Key Number (1 to 3) (0=disable)
// C = CBC Encryption
// Z = Initial Value set to zero
// cnt: Number of 8-bytes data to be Des operated
// Maximum of 255 bytes
// eg. for 8-bytes data, cnt=1 or cnt=0
// for 16-bytes data, cnt=2
// for 32-bytes data, cnt=4
// OUT: *pvInOutputBlock
// RETURN:
static void CombinedDesOperation (unsigned char *pvInOutputBlock, unsigned char *pvCbcBlock,
unsigned char *pbKeyString, unsigned int eDesMode,
unsigned int cnt);

// _____________________________________________________________________________
//
// FUNCTION: CalcDesMac32
// IN: eDesMode: Des operating mode (3DES or Single DES)
// 32 bits => xxCZxxxx xFEIxxKK xFEIxxKK xFEIxxKK
// F = Do Final Des Permutation
// E = Des Encryption Mode (1=Encrypt)
// I = Do Initial Des Permutation
// KK = Key Number (1 to 3) (0=disable)
// C = CBC Encryption
// Z = Initial Value set to zero
// *pvSubKeys: 8 or 16 bytes key for encrypt/decrypt
// key[0] .. key1 MSByte
// key[7] .. key1 LSByte
// key[8] .. key2 MSByte
// key[15] .. key2 LSByte
// *pvCbcBlock: 8 bytes value for CBC mode xor
// pvCbcBlock[0] .. MSByte
// pvCbcBlock[7] .. LSByte
// *pbInputData: data input for calculating MAC
// eNBytes: Number of input data bytes
// OUT: *pbMac32Out: 4 bytes output calculated MAC32
// RETURN:
static void CalcDesMac32( unsigned int eDesMode, unsigned char *pvSubKeys, unsigned char *pvCbcBlock,
unsigned char *pbInputData, unsigned int eNBytes , unsigned char *pbMac32Out);

static char CheckDesMac32( unsigned int eDesMode, unsigned char *pvSubKeys, unsigned char *pvCbcBlock,
unsigned char *pbInputData, unsigned int eNBytes );

/**************************************************************************************************/
/*PBOC MAC*/
static void CalcPBOCMac( unsigned char *pvSubKeys,
unsigned char *pvCbcBlock,
unsigned char *pbInputData,
unsigned int eNBytes ,
unsigned char *pbMac32Out);

static void CalCrc16( unsigned char* input,
unsigned char* Crc16,
unsigned int len);

static char CheckCrc16( unsigned char* input, unsigned int len);

static void RandGen4(unsigned char *abRnd);

static void _checktable (unsigned char line,unsigned char *text,unsigned char *lasttext,unsigned char *IDD);
static void Exor8Bytes (unsigned char *Output, unsigned char *Input1, unsigned char *input2);
};
...全文
182 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhongfenglin 2012-11-28
  • 打赏
  • 举报
回复
引用 3 楼 jiftlixu 的回复:
引用 2 楼 zhongfenglin 的回复:引用 1 楼 jiftlixu 的回复:盼回复。。。。。。。。。。。。。。。。。。回复 谢谢,盼有用的回复
支持的回复啊
可爱的小莱 2012-11-27
  • 打赏
  • 举报
回复
引用 2 楼 zhongfenglin 的回复:
引用 1 楼 jiftlixu 的回复:盼回复。。。。。。。。。。。。。。。。。。回复
谢谢,盼有用的回复
zhongfenglin 2012-11-27
  • 打赏
  • 举报
回复
引用 1 楼 jiftlixu 的回复:
盼回复。。。。。。。。。。。。。。。。。。
回复
可爱的小莱 2012-11-27
  • 打赏
  • 举报
回复
盼回复。。。。。。。。。。。。。。。。。。

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧