Java Mac 加密方法 想要一个Java Mac加密和方法支持Ansi X9.9的Mac加密有方法提供或者有解决方案提供者重赏:) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 csdn别处c&p来的C代码,小改一下就成。void xor(unsigned char *input1,unsigned char *input2,unsigned char *output,int len){ while (len) { *output++=*input1++^*input2++; len--; }}/* *@brief: 根据输入数据计算MAC,初始IV向量默认为"\x00\x00\x00\x00\x00\x00\x00\x00" *@param: sMacKey 密钥 *@param: pInData 输入数据 *@param: iInLen 输入数据长度 *@param: pRetData 计算出来的MAC *@调用自定义xor和des函数 */void MacArithmetic(unsigned char *sMacKey,unsigned char *pInData,int iInLen,unsigned char *pRetData){ //MAC算法: //将字符串pInata分为8字节为单位的数据块,不足补\x00,分别标号为D1,D2,D3,...,Dn //设置初始向量E0="\x00\x00\x00\x00\x00\x00\x00\x00" //将E0^D1 —---->E1(E0,D1异或的后结果经des加密得到E1) //将E1^D2 ----->E2 //如此类推,知道得出En结束,En即是计算出来的MAC unsigned char sUpData[512]; unsigned char sData[20]; unsigned char sXorData[20]; unsigned char sDesData[20]; int i,n,iNum; memset(sUpData,0,sizeof(sUpData)); memset(sData,0,sizeof(sData)); memset(sXorData,0,sizeof(sXorData)); memset(sDesData,0,sizeof(sDesData)); //补全要加密数据成8倍数到sUpData,不足补\x00 memcpy(sUpData,pInData,iInLen); iNum = iInLen%8; if (iNum == 0) n=iInLen/8; else { n=iInLen/8+1; memcpy(sUpData+iInLen,"\x00\x00\x00\x00\x00\x00\x00\x00",8-iNum); } printf("n=%d\nsUpData=[%s]\n",n,sUpData); //轮循异或,加密 memcpy(sDesData,"\x00\x00\x00\x00\x00\x00\x00\x00",8); //初始向量赋给sDesData for(i=0;i<n;i++) { //拷贝sUpData中下一个8位到sData memcpy(sData,sUpData+i*8,8); xor(sDesData,sData,sXorData,8); //异或 Des(sXorData,sDesData,sMacKey,1); //des加密 } memcpy(pRetData,sDesData,8); return ;} 正则表达式 的问题 如何用java调用默认邮件客户端发送邮件(邮件是带附件的)? 关于邮件的问题 请问一下现在用jbuilder几点零最稳定而又不落伍? 哦,没分了(今天都用光了),只能求好心,乐于助人的大侠帮忙了!!万分感谢! 如何设置默认字体? 50分求教:毕设急等 关于JTable双击表头的排序的问题。 如何实现日期的加减?。。。。。。。。。。。。。。 关于SWITCH 如何使用xsd进行开发 关于动态构建树模型的优化
{
while (len) {
*output++=*input1++^*input2++;
len--;
}
}
/*
*@brief: 根据输入数据计算MAC,初始IV向量默认为"\x00\x00\x00\x00\x00\x00\x00\x00"
*@param: sMacKey 密钥
*@param: pInData 输入数据
*@param: iInLen 输入数据长度
*@param: pRetData 计算出来的MAC
*@调用自定义xor和des函数
*/void MacArithmetic(unsigned char *sMacKey,unsigned char *pInData,int iInLen,unsigned char *pRetData)
{
//MAC算法:
//将字符串pInata分为8字节为单位的数据块,不足补\x00,分别标号为D1,D2,D3,...,Dn
//设置初始向量E0="\x00\x00\x00\x00\x00\x00\x00\x00"
//将E0^D1 —---->E1(E0,D1异或的后结果经des加密得到E1)
//将E1^D2 ----->E2
//如此类推,知道得出En结束,En即是计算出来的MAC
unsigned char sUpData[512];
unsigned char sData[20];
unsigned char sXorData[20];
unsigned char sDesData[20];
int i,n,iNum;
memset(sUpData,0,sizeof(sUpData));
memset(sData,0,sizeof(sData));
memset(sXorData,0,sizeof(sXorData));
memset(sDesData,0,sizeof(sDesData));
//补全要加密数据成8倍数到sUpData,不足补\x00
memcpy(sUpData,pInData,iInLen);
iNum = iInLen%8;
if (iNum == 0)
n=iInLen/8;
else {
n=iInLen/8+1;
memcpy(sUpData+iInLen,"\x00\x00\x00\x00\x00\x00\x00\x00",8-iNum);
}
printf("n=%d\nsUpData=[%s]\n",n,sUpData);
//轮循异或,加密
memcpy(sDesData,"\x00\x00\x00\x00\x00\x00\x00\x00",8); //初始向量赋给sDesData
for(i=0;i<n;i++)
{
//拷贝sUpData中下一个8位到sData
memcpy(sData,sUpData+i*8,8);
xor(sDesData,sData,sXorData,8); //异或
Des(sXorData,sDesData,sMacKey,1); //des加密
}
memcpy(pRetData,sDesData,8);
return ;
}