皮皮网
皮皮网

【php 源码封装】【android 直播案例源码】【eclipse jdk源码编译】aes 文件加密 c源码_aes文件加密解密

来源:机构动态指标源码 发表时间:2024-11-23 11:33:02

1.Cstance("AES/ECB/PKCS5Padding")怎么解决?
2.c++实现AES加密解密算法
3.aes加密算法C代码
4.python实现AES 加密 (CBC pkcs7padding 128)

aes 文件加密 c源码_aes文件加密解密

Cstance("AES/ECB/PKCS5Padding")怎么解决?

       结论:文章讨论了如何使用AES/ECB/PKCS5Padding模式对字符串进行加密和解密,文s文通过提供自定义的加件加密码生成密钥。以下是密c密解密改写后的直观回答:

       在Java中,为了使用AES(高级加密标准)对字符串进行加密,源码你可以按照以下步骤操作:

       1. 首先,文s文创建一个`SecretKeySpec`对象,加件加php 源码封装例如:

       SecretKeySpec aesKey = new SecretKeySpec("".getBytes(),密c密解密 "AES");

       这里的""可以是任何长度的密码,但必须在实际应用中替换为安全的源码密钥。

       2. 确保你的文s文密钥不为空,如果为空,加件加将抛出异常。密c密解密接着,源码对密钥进行补位,文s文以便适应AES算法的加件加字节长度要求。

       3. 使用`Cipher`类的密c密解密`AES/ECB/PKCS5Padding`模式进行加密或解密操作。以加密为例:

       Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");

       cipher.init(Cipher.ENCRYPT_MODE, aesKey);

       byte[] encrypted = cipher.doFinal(src.getBytes("utf-8"));

       这里的`src`是你想要加密的字符串。

       4. 加密后的结果可以是Base编码或十六进制字符串,如:

       return binary(encrypted, ); // 返回十六进制字符串

       解密时,只需将加密后的字符串转换回字节数组,然后使用相同的密钥和模式进行解密。

       文章提供的android 直播案例源码`AES`类包含了完整的加密和解密方法,你可以根据需要调用它们,但请注意在实际应用中确保使用安全的密钥和适当的加密策略。

c++实现AES加密解密算法

       本文旨在讲解如何在C++中实现AES加密与解密功能,内容分为两大部分:

       首先,创建了一个外部调用类CAes,用于实现AES加密解密静态库的封装。

       在进行开发时,本代码是在Windows 系统环境下使用Visual Studio 进行调试。

       第二部分,提供了测试代码示例,eclipse jdk源码编译用于验证静态库的正确性。

       下面是测试代码的具体实现:

       在执行后,得到了相应的运行结果。

       需要注意的是,CAes类中的所有函数均为静态函数,无需定义对象即可直接调用,通过CAes::前缀访问。

       在初始化时,可以通过CAes::initAes设置密钥,若未设置,ui界面切换源码则系统将使用默认密钥。

       默认密钥通过数组UINT8 gAesKey[]进行定义。

       加密与解密操作,如encryptData和decryptData,可以实现与其它编程语言(例如Java)间的加密与解密互操作。

       对于带有数据长度信息的加密操作,encryptDataWithHead与decryptDataWithHead函数在加密时,会将源数据长度转换为8位长度的进制字符串,并将其作为数据头添加在源数据前;而在解密过程中,需先去除数据头再进行解密处理。加入我们页面源码

aes加密算法C代码

       完整的!

       #include "stdio.h"

       #include "memory.h"

       #include "time.h"

       #include "stdlib.h"

       #define PLAIN_FILE_OPEN_ERROR -1

       #define KEY_FILE_OPEN_ERROR -2

       #define CIPHER_FILE_OPEN_ERROR -3

       #define OK 1

       typedef char ElemType;

        /*初始置换表IP*/

       int IP_Table[] = { ,,,,,,9,1,

       ,,,,,,,3,

       ,,,,,,,5,

       ,,,,,,,7,

       ,,,,,,8,0,

       ,,,,,,,2,

       ,,,,,,,4,

       ,,,,,,,6};

       /*逆初始置换表IP^-1*/

       int IP_1_Table[] = { ,7,,,,,,,

        ,6,,,,,,,

        ,5,,,,,,,

        ,4,,,,,,,

        ,3,,,,,,,

        ,2,,,,,,,

        ,1,,9,,,,,

        ,0,,8,,,,};

       /*扩充置换表E*/

       int E_Table[] = { , 0, 1, 2, 3, 4,

       3, 4, 5, 6, 7, 8,

       7, 8,9,,,,

       ,,,,,,

       ,,,,,,

       ,,,,,,

       ,,,,,,

       ,,,,, 0};

       /*置换函数P*/

       int P_Table[] = { ,6,,,,,,,

       0,,,,4,,,9,

       1,7,,,,,2,8,

       ,,,5,,,3,};

       /*S盒*/

       int S[8][4][] =

       /*S1*/

       { { { ,4,,1,2,,,8,3,,6,,5,9,0,7},

        { 0,,7,4,,2,,1,,6,,,9,5,3,8},

        { 4,1,,8,,6,2,,,,9,7,3,,5,0},

        { ,,8,2,4,9,1,7,5,,3,,,0,6,}},

        /*S2*/

        { { ,1,8,,6,,3,4,9,7,2,,,0,5,},

        { 3,,4,7,,2,8,,,0,1,,6,9,,5},

        { 0,,7,,,4,,1,5,8,,6,9,3,2,},

        { ,8,,1,3,,4,2,,6,7,,0,5,,9}},

        /*S3*/

        { { ,0,9,,6,3,,5,1,,,7,,4,2,8},

        { ,7,0,9,3,4,6,,2,8,5,,,,,1},

        { ,6,4,9,8,,3,0,,1,2,,5,,,7},

        { 1,,,0,6,9,8,7,4,,,3,,5,2,}},

        /*S4*/

        { { 7,,,3,0,6,9,,1,2,8,5,,,4,},

        { ,8,,5,6,,0,3,4,7,2,,1,,,9},

        { ,6,9,0,,,7,,,1,3,,5,2,8,4},

        { 3,,0,6,,1,,8,9,4,5,,,7,2,}},

        /*S5*/

        { { 2,,4,1,7,,,6,8,5,3,,,0,,9},

        { ,,2,,4,7,,1,5,0,,,3,9,8,6},

        { 4,2,1,,,,7,8,,9,,5,6,3,0,},

        { ,8,,7,1,,2,,6,,0,9,,4,5,3}},

        /*S6*/

        { { ,1,,,9,2,6,8,0,,3,4,,7,5,},

        { ,,4,2,7,,9,5,6,1,,,0,,3,8},

        { 9,,,5,2,8,,3,7,0,4,,1,,,6},

        { 4,3,2,,9,5,,,,,1,7,6,0,8,}},

        /*S7*/

        { { 4,,2,,,0,8,,3,,9,7,5,,6,1},

        { ,0,,7,4,9,1,,,3,5,,2,,8,6},

        { 1,4,,,,3,7,,,,6,8,0,5,9,2},

        { 6,,,8,1,4,,7,9,5,0,,,2,3,}},

        /*S8*/

        { { ,2,8,4,6,,,1,,9,3,,5,0,,7},

        { 1,,,8,,3,7,4,,5,6,,0,,9,2},

        { 7,,4,1,9,,,2,0,6,,,,3,5,8},

        { 2,1,,7,4,,8,,,,9,0,3,5,6,}}};

       /*置换选择1*/

       int PC_1[] = { ,,,,,,8,

        0,,,,,,,

        9,1,,,,,,

        ,,2,,,,,

        ,,,,,,,

        6,,,,,,,

        ,5,,,,,,

        ,,4,,,,3};

       /*置换选择2*/

       int PC_2[] = { ,,,,0,4,2,,

        ,5,,9,,,,3,

        ,7,,6,,,,1,

        ,,,,,,,,

        ,,,,,,,,

        ,,,,,,,};

       /*对左移次数的规定*/

       int MOVE_TIMES[] = { 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1};

       int ByteToBit(ElemType ch,ElemType bit[8]);

       int BitToByte(ElemType bit[8],ElemType *ch);

       int Char8ToBit(ElemType ch[8],ElemType bit[]);

       int BitToChar8(ElemType bit[],ElemType ch[8]);

       int DES_MakeSubKeys(ElemType key[],ElemType subKeys[][]);

       int DES_PC1_Transform(ElemType key[], ElemType tempbts[]);

       int DES_PC2_Transform(ElemType key[], ElemType tempbts[]);

       int DES_ROL(ElemType data[], int time);

       int DES_IP_Transform(ElemType data[]);

       int DES_IP_1_Transform(ElemType data[]);

       int DES_E_Transform(ElemType data[]);

       int DES_P_Transform(ElemType data[]);

       int DES_SBOX(ElemType data[]);

       int DES_XOR(ElemType R[], ElemType L[],int count);

       int DES_Swap(ElemType left[],ElemType right[]);

       int DES_EncryptBlock(ElemType plainBlock[8], ElemType subKeys[][], ElemType cipherBlock[8]);

       int DES_DecryptBlock(ElemType cipherBlock[8], ElemType subKeys[][], ElemType plainBlock[8]);

       int DES_Encrypt(char *plainFile, char *keyStr,char *cipherFile);

       int DES_Decrypt(char *cipherFile, char *keyStr,char *plainFile);

       /*字节转换成二进制*/

       int ByteToBit(ElemType ch, ElemType bit[8]){

        int cnt;

        for(cnt = 0;cnt < 8; cnt++){

        *(bit+cnt) = (ch>>cnt)&1;

        }

        return 0;

       }

       /*二进制转换成字节*/

       int BitToByte(ElemType bit[8],ElemType *ch){

        int cnt;

        for(cnt = 0;cnt < 8; cnt++){

        *ch |= *(bit + cnt)<<cnt;

        }

        return 0;

       }

       /*将长度为8的字符串转为二进制位串*/

       int Char8ToBit(ElemType ch[8],ElemType bit[]){

        int cnt;

        for(cnt = 0; cnt < 8; cnt++){

        ByteToBit(*(ch+cnt),bit+(cnt<<3));

        }

        return 0;

       }

       /*将二进制位串转为长度为8的字符串*/

       int BitToChar8(ElemType bit[],ElemType ch[8]){

        int cnt;

        memset(ch,0,8);

        for(cnt = 0; cnt < 8; cnt++){

        BitToByte(bit+(cnt<<3),ch+cnt);

        }

        return 0;

       }

       /*生成子密钥*/

       int DES_MakeSubKeys(ElemType key[],ElemType subKeys[][]){

        ElemType temp[];

        int cnt;

        DES_PC1_Transform(key,temp);/*PC1置换*/

        for(cnt = 0; cnt < ; cnt++){ /*轮跌代,产生个子密钥*/

        DES_ROL(temp,MOVE_TIMES[cnt]);/*循环左移*/

        DES_PC2_Transform(temp,subKeys[cnt]);/*PC2置换,产生子密钥*/

        }

        return 0;

       }

       /*密钥置换1*/

       int DES_PC1_Transform(ElemType key[], ElemType tempbts[]){

        int cnt;

        for(cnt = 0; cnt < ; cnt++){

        tempbts[cnt] = key[PC_1[cnt]];

        }

        return 0;

       }

       /*密钥置换2*/

       int DES_PC2_Transform(ElemType key[], ElemType tempbts[]){

        int cnt;

        for(cnt = 0; cnt < ; cnt++){

        tempbts[cnt] = key[PC_2[cnt]];

        }

        return 0;

       }

       /*循环左移*/

       int DES_ROL(ElemType data[], int time){

        ElemType temp[];

        /*保存将要循环移动到右边的位*/

        memcpy(temp,data,time);

        memcpy(temp+time,data+,time);

        /*前位移动*/

        memcpy(data,data+time,-time);

        memcpy(data+-time,temp,time);

        /*后位移动*/

        memcpy(data+,data++time,-time);

        memcpy(data+-time,temp+time,time);

        return 0;

       }

       /*IP置换*/

       int DES_IP_Transform(ElemType data[]){

        int cnt;

        ElemType temp[];

        for(cnt = 0; cnt < ; cnt++){

        temp[cnt] = data[IP_Table[cnt]];

        }

        memcpy(data,temp,);

        return 0;

       }

       /*IP逆置换*/

       int DES_IP_1_Transform(ElemType data[]){

        int cnt;

        ElemType temp[];

        for(cnt = 0; cnt < ; cnt++){

        temp[cnt] = data[IP_1_Table[cnt]];

        }

        memcpy(data,temp,);

        return 0;

       }

       /*扩展置换*/

       int DES_E_Transform(ElemType data[]){

        int cnt;

        ElemType temp[];

        for(cnt = 0; cnt < ; cnt++){

        temp[cnt] = data[E_Table[cnt]];

        }

        memcpy(data,temp,);

        return 0;

       }

       /*P置换*/

       int DES_P_Transform(ElemType data[]){

        int cnt;

        ElemType temp[];

        for(cnt = 0; cnt < ; cnt++){

        temp[cnt] = data[P_Table[cnt]];

        }

        memcpy(data,temp,);

        return 0;

       }

       /*异或*/

       int DES_XOR(ElemType R[], ElemType L[] ,int count){

        int cnt;

        for(cnt = 0; cnt < count; cnt++){

        R[cnt] ^= L[cnt];

        }

        return 0;

       }

       /*S盒置换*/

       int DES_SBOX(ElemType data[]){

        int cnt;

        int line,row,output;

        int cur1,cur2;

        for(cnt = 0; cnt < 8; cnt++){

        cur1 = cnt*6;

        cur2 = cnt<<2;

        /*计算在S盒中的行与列*/

        line = (data[cur1]<<1) + data[cur1+5];

        row = (data[cur1+1]<<3) + (data[cur1+2]<<2)

       + (data[cur1+3]<<1) + data[cur1+4];

        output = S[cnt][line][row];

        /*化为2进制*/

        data[cur2] = (output&0X)>>3;

        data[cur2+1] = (output&0X)>>2;

        data[cur2+2] = (output&0X)>>1;

        data[cur2+3] = output&0x;

        }

        return 0;

       }

       /*交换*/

       int DES_Swap(ElemType left[], ElemType right[]){

        ElemType temp[];

        memcpy(temp,left,);

        memcpy(left,right,);

        memcpy(right,temp,);

        return 0;

       }

       /*加密单个分组*/

       int DES_EncryptBlock(ElemType plainBlock[8], ElemType subKeys[][], ElemType cipherBlock[8]){

        ElemType plainBits[];

        ElemType copyRight[];

        int cnt;

        Char8ToBit(plainBlock,plainBits);

        /*初始置换(IP置换)*/

        DES_IP_Transform(plainBits);

        /*轮迭代*/

        for(cnt = 0; cnt < ; cnt++){

        memcpy(copyRight,plainBits+,);

        /*将右半部分进行扩展置换,从位扩展到位*/

        DES_E_Transform(copyRight);

        /*将右半部分与子密钥进行异或操作*/

        DES_XOR(copyRight,subKeys[cnt],);

        /*异或结果进入S盒,输出位结果*/

        DES_SBOX(copyRight);

        /*P置换*/

        DES_P_Transform(copyRight);

        /*将明文左半部分与右半部分进行异或*/

        DES_XOR(plainBits,copyRight,);

        if(cnt != ){

       /*最终完成左右部的交换*/

       DES_Swap(plainBits,plainBits+);

        }

        }

        /*逆初始置换(IP^1置换)*/

        DES_IP_1_Transform(plainBits);

        BitToChar8(plainBits,cipherBlock);

        return 0;

       }

       /*解密单个分组*/

       int DES_DecryptBlock(ElemType cipherBlock[8], ElemType subKeys[][],ElemType plainBlock[8]){

        ElemType cipherBits[];

        ElemType copyRight[];

        int cnt;

        Char8ToBit(cipherBlock,cipherBits);

        /*初始置换(IP置换)*/

        DES_IP_Transform(cipherBits);

        /*轮迭代*/

        for(cnt = ; cnt >= 0; cnt--){

        memcpy(copyRight,cipherBits+,);

        /*将右半部分进行扩展置换,从位扩展到位*/

        DES_E_Transform(copyRight);

        /*将右半部分与子密钥进行异或操作*/

        DES_XOR(copyRight,subKeys[cnt],);

        /*异或结果进入S盒,输出位结果*/

        DES_SBOX(copyRight);

        /*P置换*/

        DES_P_Transform(copyRight);

        /*将明文左半部分与右半部分进行异或*/

        DES_XOR(cipherBits,copyRight,);

        if(cnt != 0){

       /*最终完成左右部的交换*/

       DES_Swap(cipherBits,cipherBits+);

        }

        }

        /*逆初始置换(IP^1置换)*/

        DES_IP_1_Transform(cipherBits);

        BitToChar8(cipherBits,plainBlock);

        return 0;

       }

       /*加密文件*/

       int DES_Encrypt(char *plainFile, char *keyStr,char *cipherFile){

        FILE *plain,*cipher;

        int count;

        ElemType plainBlock[8],cipherBlock[8],keyBlock[8];

        ElemType bKey[];

        ElemType subKeys[][];

        if((plain = fopen(plainFile,"rb")) == NULL){

        return PLAIN_FILE_OPEN_ERROR;

        }

        if((cipher = fopen(cipherFile,"wb")) == NULL){

        return CIPHER_FILE_OPEN_ERROR;

        }

        /*设置密钥*/

        memcpy(keyBlock,keyStr,8);

        /*将密钥转换为二进制流*/

        Char8ToBit(keyBlock,bKey);

        /*生成子密钥*/

        DES_MakeSubKeys(bKey,subKeys);

        while(!feof(plain)){

        /*每次读8个字节,并返回成功读取的字节数*/

        if((count = fread(plainBlock,sizeof(char),8,plain)) == 8){

       DES_EncryptBlock(plainBlock,subKeys,cipherBlock);

       fwrite(cipherBlock,sizeof(char),8,cipher);

        }

        }

        if(count){

        /*填充*/

        memset(plainBlock + count,'\0',7 - count);

        /*最后一个字符保存包括最后一个字符在内的所填充的字符数量*/

        plainBlock[7] = 8 - count;

        DES_EncryptBlock(plainBlock,subKeys,cipherBlock);

        fwrite(cipherBlock,sizeof(char),8,cipher);

        }

        fclose(plain);

        fclose(cipher);

        return OK;

       }

       /*解密文件*/

       int DES_Decrypt(char *cipherFile, char *keyStr,char *plainFile){

        FILE *plain, *cipher;

        int count,times = 0;

        long fileLen;

        ElemType plainBlock[8],cipherBlock[8],keyBlock[8];

        ElemType bKey[];

        ElemType subKeys[][];

        if((cipher = fopen(cipherFile,"rb")) == NULL){

        return CIPHER_FILE_OPEN_ERROR;

        }

        if((plain = fopen(plainFile,"wb")) == NULL){

        return PLAIN_FILE_OPEN_ERROR;

        }

        /*设置密钥*/

        memcpy(keyBlock,keyStr,8);

        /*将密钥转换为二进制流*/

        Char8ToBit(keyBlock,bKey);

        /*生成子密钥*/

        DES_MakeSubKeys(bKey,subKeys);

        /*取文件长度 */

        fseek(cipher,0,SEEK_END);/*将文件指针置尾*/

        fileLen = ftell(cipher); /*取文件指针当前位置*/

        rewind(cipher); /*将文件指针重指向文件头*/

        while(1){

        /*密文的字节数一定是8的整数倍*/

        fread(cipherBlock,sizeof(char),8,cipher);

        DES_DecryptBlock(cipherBlock,subKeys,plainBlock);

        times += 8;

        if(times < fileLen){

       fwrite(plainBlock,sizeof(char),8,plain);

        }

        else{

       break;

        }

        }

        /*判断末尾是否被填充*/

        if(plainBlock[7] < 8){

        for(count = 8 - plainBlock[7]; count < 7; count++){

       if(plainBlock[count] != '\0'){

        break;

       }

        }

        }

        if(count == 7){ /*有填充*/

        fwrite(plainBlock,sizeof(char),8 - plainBlock[7],plain);

        }

        else{ /*无填充*/

        fwrite(plainBlock,sizeof(char),8,plain);

        }

        fclose(plain);

        fclose(cipher);

        return OK;

       }

       int main()

       {

        clock_t a,b;

        a = clock();

        DES_Encrypt("1.txt","key.txt","2.txt");

        b = clock();

        printf("加密消耗%d毫秒\n",b-a);

        system("pause");

        a = clock();

        DES_Decrypt("2.txt","key.txt","3.txt");

        b = clock();

        printf("解密消耗%d毫秒\n",b-a);

        getchar();

        return 0;

       }

python实现AES 加密 (CBC pkcs7padding )

       AES加密,即高级加密标准,是一种广泛应用的对称加密算法,尤其在微信小程序的数据传输中。其基本原理是使用同一密钥进行加密和解密,过程如下:

       明文未经加密前,是原始数据的纯形式。对称加密的密钥至关重要,由通信双方协商产生,但因其敏感性,通常不会直接在网络上传输,而是通过非对称加密算法加密后再传递,确保安全。密钥的保密性至关重要,一旦泄漏,可能导致数据被非法解密。

       具体操作中,如使用AES加密函数E,输入明文P和密钥K,会得到密文C:C = E(K, P)。同样,解密函数D以密文C和密钥K为输入,可还原出原始明文P:P = D(K, C)。

       对称加密与非对称加密主要区别在于:对称加密速度快,适合大量数据传输,但密钥传输需额外安全措施;而非对称加密如RSA、ECC和EIGamal,虽然速度较慢,但加密解密使用不同密钥,安全性更高,密钥传输更便捷。

       在Python中,实现AES加密后,通过与在线AES工具的加密结果对比,可以验证其正确性,生成的密文与在线工具一致,证明了代码的正确性。

相关栏目:知识