求支持多线程的des算法
求支持多线程的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);
};
...全文
相关推荐
DES算法Java实现
DES算法,可扩展成3DES算法,Java实现,Eclipse中可直接运行
java多线程在线聊天室,聊天内容用DES加密
自己一字一字完成的java多线程在线聊天室,群聊和私聊的功能,对所有的聊天内容用DES算法加密。SWING界面
Python基于DES算法加密解密实例
主要介绍了Python基于DES算法加密解密实现方法,以实例形式分析了DES算法实现加密解密的相关技巧,需要的朋友可以参考下
js DES加密、解密支持中文
全js代码生成DES加密解密支持中文汉字
s-des和des算法实现
实现s-des和des,实现控制台对所有文件加解密。 附赠文档一份。可以从控制台输入加解密的文件。并对文件实行相应操作。可以加解密utf-8上的任意字符。


