AES加密 java&c++版本
C++版本
AES.h:
#ifndef __AES_H__
#define __AES_H__
#include <string.h>
class AES
{
public:
AES(unsigned char* key);
virtual ~AES();
//加密整段文字
void Bm53Cipher(char *input,char *output);
void Bm53InvCipher(char *inut, char *output);
void InvCipher(char *inut, char *output);
private:
unsigned char* Cipher(unsigned char* input);
unsigned char* InvCipher(unsigned char* input);
void* Cipher(void* input, int length=0);
void* InvCipher(void* input, int length);
void Cipher(char *input, char *output);
unsigned char Sbox[256];
unsigned char InvSbox[256];
unsigned char w[11][4][4];
void KeyExpansion(unsigned char* key, unsigned char w[][4][4]);
unsigned char FFmul(unsigned char a, unsigned char b);
void SubBytes(unsigned char state[][4]);
void ShiftRows(unsigned char state[][4]);
void MixColumns(unsigned char state[][4]);
void AddRoundKey(unsigned char state[][4], unsigned char k[][4]);
void InvSubBytes(unsigned char state[][4]);
void InvShiftRows(unsigned char state[][4]);
void InvMixColumns(unsigned char state[][4]);
int strToHex(const char *ch, char *hex);
int hexToStr(const char *hex, char *ch);
int ascillToValue(const char ch);
char valueToHexCh(const int value);
int getUCharLen(const unsigned char *uch);
int getUChar16Len(const unsigned char *uch);
int strToUChar(const char *ch, unsigned char *uch);
int ucharToStr(const unsigned char *uch, char *ch);
int ucharToHex(const unsigned char *uch, char *hex);
int hexToUChar(const char *hex, unsigned char *uch);
};
#endif
AES.cpp:
// AES.cpp: implementation of the AES class.
//
//////////////////////////////////////////////////////////////////////
#include "stdio.h"
#include "memory.h"
#include "time.h"
#include "stdlib.h"
#include "AES.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
AES::AES(unsigned char* key)
{
unsigned char sBox[] =
{ /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5,0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76, /*0*/
0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0,0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0, /*1*/
0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc,0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15, /*2*/
0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a,0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75, /*3*/
0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0,0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84, /*4*/
0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b,0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf, /*5*/
0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85,0x45,0xf9,