AES是一种加密算法:
在密码学中又称Rijndael加密法,是美国联邦 *** 采用的一种区块加密标准。
这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。
经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。
2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
WPA2-PSK:
WPA2 (WPA 第二版) 是 Wi-Fi 联盟对采用 IEEE 802.11i 安全增强功能的产品的认证计划。
简单一点理解,WPA2是基于WPA的一种新的加密方式。
WPA2是WPA的升级版,现在新型的网卡、AP都支持WPA2加密。
WPA2则采用了更为安全的算法。
CCMP取代了WPA的MIC、AES取代了WPA的TKIP。
区别:
WPA2-PSK中可以使用AES算法,但不代表WPA2就是AES。
AES算法应用领域很广,很多软件的加密使用的是AES加密算法。
WPA2-PSK主要应用于无线加密领域,是一种常见的安全性较高的认证类型。
对一个文件进行两次以上AES加密不就无法判定解密成功了?尤其是分段异码加密,暴软无法知道各个密码对应的加密范围,即使遍历到正确的密码,返回的仍然是乱码。这方面的软件首推WINHEX,配合文件拆分功能,要解密,基本上是无门,即使今后电脑的运行速度趋近无穷快,也不行,除非具备人工智能。
这个我不清楚。
文件夹加密软件,我使用的是文件夹加密超级大师。
文件夹加密超级大师支持所有windows系统,可以加密文件夹,加密文件,保护磁盘和数据粉碎,使用起来非常方便。
在需要加密的文件和文件夹上单击鼠标右键选择加密就可以了。
解密时只要双击加密的文件夹和文件,输入正确的密码就可以解密。
文件夹加密超级大师加密后的文件和文件夹可以防止删除、复制和移动。
相对于其他的文件夹加密软件和文件加密软件,功能和性能还有操作都更加的出色。
并且有微软、360和金山的安全认证,是一款绝对安全的文件夹加密软件。
您可以到百度上下载文件夹加密超级大师来给您的文件和文件夹加密,看看使用效果怎么样?
如果您对文件夹加密是轻度需求,那么闪电文件夹加密大师完全可以满足日常使用。
01什么是闪电文件夹加密大师?
这是一款专业强劲的数据加密软件,采用美国联邦政府的一种区块加密标准-AES加密,加密速度快、安全性高、资源消耗低,不仅拥有加密、解密、打开等功能,而且本地加密/解密,更安全,更高效,同时界面简洁,操作方便,一用即会,让闪电文件夹加密大师成为您文件(夹)加密的好帮手!
02如何使用闪电文件夹加密大师呢?
加密文件夹
第一步、双击打开软件,点击“添加文件夹”,选择添加需要加密的文件夹。
第二步、然后,点击“加密文件”。
第三步、接着,在这里输入加密密码。
第四步、稍等片刻,加密成功!
解密文件夹
文件夹加密后,其他人就打开不了你的文件夹啦!加密很简单,解密更加简单,一起来看看解密步骤。
第一步、同样的,打开软件,选择添加需要解密的文件夹。
第二步、如图,点击“解密文件”。
第三步、直接在这里输入加密密码即可。
第四步、得到以下提示,说明文件已解密成功,这时候你的文件就可以打开啦!
目前国内最好的加密软件应该是迅影加密王,他采用最新国际高强度(aes256)位加密算法的加密软件。理论暴力破解时间需要10万年。美国FBI曾经花费1年时间试图破解此加密算法,结果并未成功。迅影加密王是一款绿色软件,支持u盘,移动硬盘,硬盘。放到u盘后,插上电脑就可以使用,重装系统也一样,无需重复安装。安全简单实用,加密解密速度快。
有界面,我这里有个,但是是c#语言的,你以为如何?
下面是c版本的
AES加密算法源代码
//AES.h
#define decrypt TRUE
#define encrypt FALSE
#define TYPE BOOL
typedef struct _AES{
int Nb;
int Nr;
int Nk;
unsigned long *Word;
unsigned long *State;
}AES;
/*
加密数据
byte *input 明文
byte *inSize 明文长
byte *out 密文存放的地方
byte *key 密钥key
byte *keySize 密钥长
*/
void Cipher(
unsigned char* input,
int inSize,
unsigned char* out,
unsigned char* key,
int keySize);
/*
解密数据
byte *input 密文
int *inSize 密文长
byte *out 明文存放的地方
byte *key 密钥key
int *keySize 密钥长
*/
void InvCipher(
unsigned char* input,
int inSize,
unsigned char* out,
unsigned char* key,
int keySize);
/*
生成加密用的参数AES结构
int inSize 块大小
byte* 密钥
int 密钥长
unsigned long 属性(标实类型)
返回AES结构指针
*/
AES *InitAES(AES *aes,
int inSize,
unsigned char* key,
int keySize, TYPE type);
/*
生成加密用的参数AES结构
int inSize 块大小
byte* 密钥
int 密钥长
返回AES结构指针
*/
AES *InitAES(
int inSize,
unsigned char* key,
int keySize, BOOL );
/*
加密时进行Nr轮运算
AES * aes 运行时参数
*/
void CipherLoop(
AES *aes);
/*
解密时进行Nr轮逆运算
AES * aes 运行时参数
*/
void InvCipherLoop(
AES *aes);
/*
释放AES结构和State和密钥库word
*/
void freeAES(
AES *aes);
//AES.cpp
#include "stdafx.h"
#include
#include
#include "AES.h"
unsigned char* SubWord(unsigned char* word);
unsigned long* keyExpansion(unsigned char* key, int Nk, int Nr,int);
/*
加密数据
byte *input 明文
byte *inSize 明文长
byte *out 密文存放的地方
byte *key 密钥key
byte *keySize 密钥长
*/
void Cipher(unsigned char* input, int inSize, unsigned char* out, unsigned char* key, int keySize)
{
AES aes ;
InitAES(aes,inSize,key,keySize,encrypt);
memcpy(aes.State,input,inSize);
CipherLoop(aes);
memcpy(out,aes.State,inSize);
}
/*
解密数据
byte *input 密文
int *inSize 密文长
byte *out 明文存放的地方
byte *key 密钥key
int *keySize 密钥长
*/
void InvCipher(unsigned char* input, int inSize, unsigned char* out, unsigned char* key, int keySize)
{
AES aes;
InitAES(aes,inSize,key,keySize,decrypt);
memcpy(aes.State,input,inSize);
InvCipherLoop(aes);
memcpy(aes.State,out,inSize);
}
/*
生成加密用的参数AES结构
int inSize 块大小
byte* 密钥
int 密钥长
返回AES结构指针
*/
AES *InitAES(AES *aes,int inSize, unsigned char *key, int keySize, TYPE type)
{
int Nb = inSize 2,
Nk = keySize 2,
Nr = Nb Nk ? Nk:Nb+6;
aes-Nb = Nb;
aes-Nk = Nk;
aes-Nr = Nr;
aes-Word = keyExpansion(key,Nb,Nr,Nk);
aes-State = new unsigned long[Nb+3];
if(type)
aes-State += 3;
return aes;
}
/*
生成加密用的参数AES结构
int inSize 块大小
byte* 密钥
int 密钥长
返回AES结构指针
*/
AES *InitAES(int inSize, unsigned char* key, int keySize,unsigned long type)
{
return InitAES(new AES(),inSize,key,keySize,type);
}
/*
*/
void CipherLoop(AES *aes)
{
unsigned char temp[4];
unsigned long *word8 = aes-Word,
*State = aes-State;
int Nb = aes-Nb,
Nr = aes-Nr;
int r;
for (r = 0; r Nb; ++r)
{
State[r] ^= word8[r];
}
for (int round =1; round {
word8 += Nb;
/*
假设Nb=4;
---------------------
| s0 | s1 | s2 | s3 |
---------------------
| s4 | s5 | s6 | s7 |
---------------------
| s8 | s9 | sa | sb |
---------------------
| sc | sd | se | sf |
---------------------
| | | | |
---------------------
| | | | |
---------------------
| | | | |
---------------------
*/
memcpy(State+Nb,State,12);
/*
Nb=4;
---------------------
| s0 | | | |
---------------------
| s4 | s5 | | |
---------------------
| s8 | s9 | sa | |
---------------------
| sc | sd | se | sf |
---------------------
| | s1 | s2 | s3 |
---------------------
| | | s6 | s7 |
---------------------
| | | | sb |
---------------------
*/
for(r =0; r {
/*
temp = {Sbox[s0],Sbox[s5],Sbox[sa],Sbox[sf]};
*/
temp[0] = Sbox[*((unsigned char*)State)];
temp[1] = Sbox[*((unsigned char*)(State+1)+1)];
temp[2] = Sbox[*((unsigned char*)(State+2)+2)];
temp[3] = Sbox[*((unsigned char*)(State+3)+3)];
*((unsigned char*)State) = Log_02[temp[0]] ^ Log_03[temp[1]] ^ temp[2] ^ temp[3];
*((unsigned char*)State+1) = Log_02[temp[1]] ^ Log_03[temp[2]] ^ temp[3] ^ temp[0];
*((unsigned char*)State+2) = Log_02[temp[2]] ^ Log_03[temp[3]] ^ temp[0] ^ temp[1];
*((unsigned char*)State+3) = Log_02[temp[3]] ^ Log_03[temp[0]] ^ temp[1] ^ temp[2];
*State ^= word8[r];
State++;
}
State -= Nb;
}
memcpy(State+Nb,State,12);
word8 += Nb;
for(r =0; r {
*((unsigned char*)State) = Sbox[*(unsigned char*)State];
*((unsigned char*)State+1) = Sbox[*((unsigned char*)(State+1)+1)];
*((unsigned char*)State+2) = Sbox[*((unsigned char*)(State+2)+2)];
*((unsigned char*)State+3) = Sbox[*((unsigned char*)(State+3)+3)];
*State ^= word8[r];
State++;
}
}
/*
解密时进行Nr轮逆运算
AES * aes 运行时参数
*/
void InvCipherLoop(AES *aes)
{
unsigned long *Word = aes-Word,
*State = aes-State;
int Nb = aes-Nb,
Nr = aes-Nr;
unsigned char temp[4];
int r =0;
Word += Nb*Nr;
for (r = 0; r Nb; ++r)
{
State[r] ^= Word[r];
}
State -= 3;
for (int round = Nr-1; round 0; --round)
{
/*
假设Nb=4;
---------------------
| | | | |
---------------------
| | | | |
---------------------
| | | | |
---------------------
| s0 | s1 | s2 | s3 |
---------------------
| s4 | s5 | s6 | s7 |
---------------------
| s8 | s9 | sa | sb |
---------------------
| sc | sd | se | sf |
---------------------
*/
memcpy(State,State+Nb,12);
/*
Nb=4;
---------------------
| | | | s7 |
---------------------
| | | sa | sb |
---------------------
| | sd | se | sf |
---------------------
| s0 | s1 | s2 | s3 |
---------------------
| s4 | s5 | s6 | |
---------------------
| s8 | s9 | | |
---------------------
| sc | | | |
---------------------
*/
Word -= Nb;
State += Nb+2;
for(r = Nb-1; r = 0; r--)
{
/*
temp = {iSbox[s0],iSbox[sd],iSbox[sa],iSbox[s7]};
*/
temp[0] = iSbox[*(byte*)State];
temp[1] = iSbox[*((byte*)(State-1)+1)];
temp[2] = iSbox[*((byte*)(State-2)+2)];
temp[3] = iSbox[*((byte*)(State-3)+3)];
*(unsigned long*)temp ^= Word[r];
*(unsigned char*)State = Log_0e[temp[0]] ^ Log_0b[temp[1]] ^ Log_0d[temp[2]] ^ Log_09[temp[3]];
*((unsigned char*)State+1) = Log_0e[temp[1]] ^ Log_0b[temp[2]] ^ Log_0d[temp[3]] ^ Log_09[temp[0]];
*((unsigned char*)State+2) = Log_0e[temp[2]] ^ Log_0b[temp[3]] ^ Log_0d[temp[0]] ^ Log_09[temp[1]];
*((unsigned char*)State+3) = Log_0e[temp[3]] ^ Log_0b[temp[0]] ^ Log_0d[temp[1]] ^ Log_09[temp[2]];
State --;
}
State -= 2;
}
Word -= Nb;
memcpy(State,State+Nb,12);
State += Nb+2;
for(r = Nb-1; r = 0; r--)
{
*(unsigned char*)State = iSbox[*(unsigned char*)State];
*((unsigned char*)State+1) = iSbox[*((unsigned char*)(State-1)+1)];
*((unsigned char*)State+2) = iSbox[*((unsigned char*)(State-2)+2)];
*((unsigned char*)State+3) = iSbox[*((unsigned char*)(State-3)+3)];
*State ^= Word[r];
State --;
}
}
/*
*--------------------------------------------
*|k0|k1|k2|k3|k4|k5|k6|k7|k8|k9|.......|Nk*4|
*--------------------------------------------
*Nr轮密钥库
*每个密钥列长度为Nb
*---------------------
*| k0 | k1 | k2 | k3 |
*---------------------
*| k4 | k5 | k6 | k7 |
*---------------------
*| k8 | k9 | ka | kb |
*---------------------
*| kc | kd | ke | kf |
*---------------------
*/
unsigned long* keyExpansion(byte* key, int Nb, int Nr, int Nk)
{
unsigned long *w =new unsigned long[Nb * (Nr+1)]; // 4 columns of bytes corresponds to a word
memcpy(w,key,Nk2);
unsigned long temp;
for (int c = Nk; c Nb * (Nr+1); ++c)
{
//把上一轮的最后一行放入temp
temp = w[c-1];
//判断是不是每一轮密钥的第一行
if (c % Nk == 0)
{
//左旋8位
temp = (temp8)|(temp24);
//查Sbox表
SubWord((byte*)temp);
temp ^= Rcon[c/Nk];
}
else if ( Nk 6 (c % Nk == 4) )
{
SubWord((byte*)temp);
}
//w[c-Nk] 为上一轮密钥的第一行
w[c] = w[c-Nk] ^ temp;
}
return w;
}
unsigned char* SubWord(unsigned char* word)
{
word[0] = Sbox[ word[0] ];
word[1] = Sbox[ word[1] ];
word[2] = Sbox[ word[2] ];
word[3] = Sbox[ word[3] ];
return word;
}
/*
释放AES结构和State和密钥库word
*/
void freeAES(AES *aes)
{
// for(int i=0;iNb;i++)
// {
// printf("%d\n",i);
// free(aes-State[i]);
// free(aes-Word[i]);
// }
// printf("sdffd");
}