登录|注册|收藏本站|网站地图

欢迎光临恒隆科技官方网站

恒隆科技恒隆软件服务企业 为企业降低成本 提高安全性

我要帮您热线:400-600-5180

办公OA仓库管理软件上网行为管理系统

当前位置:首页» 技术文章 » 基于C语言的IDEA加密算法

基于C语言的IDEA加密算法

文章出处:网责任编辑:作者:人气:-发表时间:2013-12-10 13:55:00【

  由于Microson.NET框架的普及,加密技术在.NET开发中应用非常广泛,对加密技术的要求也很高。而c语言由于与.NET紧密集成,使得在c语言环境下实现IDEA加密算法具有很多的优势。

  IDEA加密算法原理

  IDEA数据加密算法基于“相异代数群上的混合运算”设计思想,它是由16比特串空间的三个不同的群,即一个逐比特异或运算的群,一个模216的加法运算的群,一个模(216+1)的乘法运算的群,由这三种不同运算组合而成的分组密码结构。这三种运算能产生良好的混淆效果和很强的扩散能力。

  IDEA的明文和密文都是64比特,密钥为128比特,使用8个循环迭代,除了所用的密钥不同以外,其加密算法和解密算法都是相同的。如下图是IDEA的一个实现界面。



  1、加密密钥扩展算法

  加密算法和解密均涉及对密钥进行扩展,IDEA也不例外,实际上,IDEA是将128比特密钥扩展为832比特的。扩展的加密密钥数组m_nKeyEncryptBox[52]由以下步骤生成:

  首先,将128比特密钥串m_sEncryptionKey分成8个子块,作为首轮8个加密密钥子块;

  再将128比特循环左移25位,移位完成后形成的128比特再分成8个子块,作为第二轮的8个加密密钥子块;

  依此类推,最终形成832比特(16*6*8+16*4)的加密密钥数组m_nKeyEncryptBox[52],其核心代码如下:

 


  2、模(216+1)乘算法Mul(ushortx,ushorty)

  IDEA加密算法中,下面是模(216+1)乘算法的代码,注意不能用return(ushorL)((x*y)%Oxl0001))来实现模乘算法。



  其中Low16(x)为X的低16位,代码为:



  3、模(216+1)乘逆元算法Mullnv(ushortx)

  IDEA加密算法中,基于模(216+1)的乘法运算群,其单位元是串0-01,为了求得参数X的逆元,算法中使用欧几里德算法(即辗转相除法),其核心代码如下:

 


  4、解密密钥扩展算法

  同加密密钥一样,解密密钥也需要进行扩展,与加密密钥扩展不同的是,IDEA的解密密钥扩展数组不需要从密钥串变换而来,那么怎样得到解密密钥扩展数组呢?其解密密钥扩展数组m_nKey–DecryptBox[52]是由加密密钥扩展数组m_nKeyEncryptBox处理而来,其处理步骤为:

  首先由m_nKeyEncryptBox[0]-mnKeyEnc–ryptBox[3]四个解密密钥数组元素处理成四个解密密钥数组元素m_nKeyDeclyptBox[51]-m_nKeyDecryptBox[48],然后进行8轮迭代,在第m轮迭代中由六个加密密钥数组元素m_nKeyEncryptBox[4+6*m]-m_nKeyEncryptBox[9+6*in]生成六个解密密钥数组元素m_nKeyDecryptBox[47-6*m]–m_nKeyDecryptBox[42-6*m]。最终生成832比特的解密密钥数组m_nKeyEncryptBox[52],核心代码如下:



  5.IDEA加密算法和解密算法

  IDEA加密算法和解密算法相同,其处理为,将64比特输入分为4个16比特的子块A、B、C、D,然后进行8轮循环,在第j轮循环中,子密钥为key[6*i]-key[6*i+5],其中i=0..7,其具体处理步骤不再赘述,其核心代码如下:



  6、算法中几点注意事项

  (1)本程序分别在Windows2000Professional操作系统,IntelPIVCPU,MicrosoftVisualStudio.NET2003V1.1.4322和WindowsServer2003professional操作系统,InteIPIVCPU,Mi-

  crosoftVisualStudio.NET2005V2.0.50727下调试通过。

  (2)程序中均使用Unicode字符集,在明文和密文输入框中需要输入8个ASCII字符。

  (3)基于IntelCPU低位在前,高位在后的特点,在进行由字节Bbyte到Unicode的转换中均取偶数位。

  (4)在进行字符变换中,有可能存在某byte值为\O,使得在由byte到Unicode的转换中,输出的Unicode值为\O,从而无法正常显示8个Unicode字符。

相关资讯