ANSI-X99MAC算法和PBOC的3DES MAC算法,附DES算法工具
来源:互联网 发布:php获取ip地理位置 编辑:程序博客网 时间:2024/06/08 16:52
-
-
-
- void PBOC_3DES_MAC( U08 *buf, U32 buf_size, U08 *key, U08 *mac_buf )
- {
- U08 val[8],xor[8];
- U08 keyL[8],keyR[8];
- U08 block[512];
- U16 x,n;
- U16 i;
- memcpy(keyL,key,8);
- memcpy(keyR,&key[8],8);
-
- memcpy( block, buf, buf_size );
- x = buf_size / 8;
- n = buf_size % 8;
- if( n != 0 )
- {
- memset( &block[x*8+n], 0x00, 8-n );
- block[x*8+n]=0x80;
- }
- else
- {
- memset( &block[x*8], 0x00, 8 );
- block[x*8]=0x80;
- }
-
- memset( val, 0x00, 8 );
- memcpy( val, UPPAN,8 );
- DataXOr(val,&block[0], 8,xor);
- for( i = 1; i < x+1; i++ )
- {
- CurCalc_DES_Encrypt(keyL,xor,val);
- DataXOr(val,&block[i*8], 8,xor);
-
- }
- CurCalc_DES_Encrypt(keyL,xor,val);
- CurCalc_DES_Decrypt(keyR,val,xor);
- CurCalc_DES_Encrypt(keyL,xor,val);
- memcpy(mac_buf,val, 8 );
- }
只要有标准的DES加密和解密算法,类似ANSI-X99MAC算法和PBOC3DES算法就很好实现。他们都是用DES算法再经过一层算法实现的。实现原理看图就能看明白。3DES算法实现就更简单了。就是DES算法再加解密一次。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- void CurCalc_3DES_Encrypt( U08 *inkey, U08 *indata, U08 *outdata )
- {
- U08 LKey[8];
- U08 RKey[8];
- U08 TmpDest[8];
-
- MyCopy( LKey, inkey, 8 );
- MyCopy( RKey, inkey+8, 8 );
-
- CurCalc_DES_Encrypt( LKey, indata, outdata );
- CurCalc_DES_Decrypt( RKey, outdata, TmpDest );
- CurCalc_DES_Encrypt( LKey, TmpDest, outdata );
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- void CurCalc_3DES_Decrypt( U08 *inkey, U08 *indata, U08 *outdata )
- {
- U08 LKey[8];
- U08 RKey[8];
- U08 TmpDest[8];
-
- MyCopy( LKey, inkey, 8 );
- MyCopy( RKey, inkey+8, 8 );
-
- CurCalc_DES_Decrypt( LKey, indata, outdata );
- CurCalc_DES_Encrypt( RKey, outdata, TmpDest );
- CurCalc_DES_Decrypt( LKey, TmpDest, outdata );
- }
-
-
-
-
-
-
-
-
-
-
- void Ansi99X_Get_MAC( U08 *buf, U32 buf_size, U08 *key, U08 *mac_buf )
- {
- U08 val[8],xor[8];
- U08 block[512];
- U16 x,n;
- U16 i,j=0;
-
- memcpy( block, buf, buf_size );
- x = buf_size / 8;
- n = buf_size % 8;
- if( n != 0 )
- {
- memset( &block[x*8+n], 0x00, 8-n );
- x += 1;
- }
-
- memset( val, 0x00, 8 );
- for( i = 0; i < x; i++ )
- {
- DataXOR(val,&block[j], 8,xor);
- CurCalc_DES_Encrypt(key,xor,val);
- j += 8;
- }
- memcpy(mac_buf,val, 8 );
- }
-
-
-
-
-
- void DataXOR( U08 *source, U08 *dest, U32 size, U08 *out )
- {
- int i;
- for( i = 0; i < size; i++ )
- { out[i] = dest[i] ^ source[i]; }
- }
实现MAC算法的原理,可以参考CPU卡指令手册或PBOC规范。如图:MAC的计算:
3DES算法计算MAC
DES算法工具:
下载:https://maxwoods.ctfile.com/fs/yNM165157404
0 0