AES加密 java&c++版本

本文介绍了如何使用C++和Java实现AES加密,提供了C++的AES.h、AES.cpp及test.cpp测试代码,以及Java版本的加密实现。经验证,两个版本的加密结果一致,均为32位密文。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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,
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值