資源簡介
C語言 3DES、AES、RC6、TEA、RSA、MD5、SHA1、SHA256加密源碼

代碼片段和文件信息
#define?BPOLY?0x1b?//!#define?BLOCKSIZE?16?//!
#define?KEY_COUNT?3
#if?KEY_COUNT?==?1
??#define?KEYBITS?128?//!#elif?KEY_COUNT?==?2
??#define?KEYBITS?192?//!#elif?KEY_COUNT?==?3
??#define?KEYBITS?256?//!#else
??#error?Use?1?2?or?3?keys!
#endif
#if?KEYBITS?==?128
??#define?ROUNDS?10?//!??#define?KEYLENGTH?16?//!#elif?KEYBITS?==?192
??#define?ROUNDS?12?//!??#define?KEYLENGTH?24?//!//?Key?length?in?number?of?bytes.
#elif?KEYBITS?==?256
??#define?ROUNDS?14?//!??#define?KEYLENGTH?32?//!#else
??#error?Key?must?be?128?192?or?256?bits!
#endif
#define?EXPANDED_KEY_SIZE?(BLOCKSIZE?*?(ROUNDS+1))?//!176?208?or?240?bytes.
unsigned?char?AES_Key_Table[32]?=
{
??0xd0?0x94?0x3f?0x8c?0x29?0x76?0x15?0xd8
??0x20?0x40?0xe3?0x27?0x45?0xd8?0x48?0xad
??0xea?0x8b?0x2a?0x73?0x16?0xe9?0xb0?0x49
??0x45?0xb3?0x39?0x28?0x0a?0xc3?0x28?0x3c
};
unsigned?char?block1[256];?//!unsigned?char?block2[256];?//!unsigned?char?tempbuf[256];
unsigned?char?*powTbl;?//!unsigned?char?*logTbl;?//!unsigned?char?*sBox;?//!unsigned?char?*sBoxInv;?//!unsigned?char?*expandedKey;?//!
void?CalcPowLog(unsigned?char?*powTbl?unsigned?char?*logTbl)
{
unsigned?char?i?=?0;
unsigned?char?t?=?1;
do?{
//?Use?0x03?as?root?for?exponentiation?and?logarithms.
powTbl[i]?=?t;
logTbl[t]?=?i;
i++;
//?Muliply?t?by?3?in?GF(2^8).
t?^=?(t?<1)?^?(t?&?0x80???BPOLY?:?0);
}while(?t?!=?1?);?//?Cyclic?properties?ensure?that?i?255.
powTbl[255]?=?powTbl[0];?//?255?=?‘-0‘?254?=?-1?etc.
}
void?CalcSBox(?unsigned?char?*?sBox?)
{
unsigned?char?i?rot;
unsigned?char?temp;
unsigned?char?result;
//?Fill?all?entries?of?sBox[].
i?=?0;
do?{
//Inverse?in?GF(2^8).
if(?i?>?0?)?
{
temp?=?powTbl[?255?-?logTbl[i]?];
}?
else?
{
temp?=?0;
}
//?Affine?transformation?in?GF(2).
result?=?temp?^?0x63;?//?Start?with?adding?a?vector?in?GF(2).
for(?rot?=?0;?rot?4;?rot++?)
{
//?Rotate?left.
temp?=?(temp<<1)?|?(temp>>7);
//?Add?rotated?byte?in?GF(2).
result?^=?temp;
}
//?Put?result?in?table.
sBox[i]?=?result;
}?while(?++i?!=?0?);
}
void?CalcSBoxInv(?unsigned?char?*?sBox?unsigned?char?*?sBoxInv?)
{
unsigned?char?i?=?0;
unsigned?char?j?=?0;
//?Iterate?through?all?elements?in?sBoxInv?using??i.
do?{
//?Search?through?sBox?using?j.
do?{
//?Check?if?current?j?is?the?inverse?of?current?i.
if(?sBox[?j?]?==?i?)
{
//?If?s
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????11630??2012-04-12?20:55??MD5.C
?????文件???????4863??2012-04-12?21:31??RC6.C
?????文件????????979??2012-04-13?01:10??RSA.C
?????文件???????7720??2012-04-12?20:58??SHA1.C
?????文件???????7633??2012-04-12?20:55??SHA256.C
?????文件???????2055??2012-04-12?21:55??TEA.C
?????文件??????13233??2012-04-12?21:42??AES.c
?????文件??????12757??2012-04-12?21:37??DES.C
-----------?---------??----------?-----??----
????????????????60870????????????????????8
評論
共有 條評論