RC5加密算法的Ronald L. Rivest教授,您为什么不出个Java版的?

To :亲耐的RC5加密算法之父——Ronald L. Rivest教授,晚辈正在使用您的RC5算法,希望得到您的技术支持~

 

 

简单介绍一下RC5:

      RC5分组密码算法是1994由麻萨诸塞技术研究所的Ronald L. Rivest教授发明的,并由RSA实验室分析。它是参数可变的分组密码算法,三个可变的参数是:分组大小、密钥大小和加密轮数。在此算法中使用了三种运算:异或、加和循环。

 

做电梯-->RC5详细介绍

 

本篇正文:

     本以为JDK那么丰富,肯定已经集成RC5,javax.crypto.spec ,里面有个类RC5ParameterSpec,那只是定义了传入的参数,过程没实现,网上一搜~全是用C或C++实现(我也不信,要不您搜搜试试,不过本文发了就不一定了,呵呵)~ 当初高估了自己实力~想改成Java版~再一想那些C++与Java基本数据类型之间的差异:比如字节数、比如高地位、比如有无符号、比如结构体的对齐位、比如我不会C++,打消此念头,在热心的【老C大哥(Caryl)】帮助下,找到了开源的RC5的java实现.不敢独享,贴上之:

 

BlockCipher:引擎接口类

RC532Engine:引擎类

BufferedBlockCipher:真正的RC类

RC5Parameters :参数类

 

-->点此购买此类<-  花费10Q币

 

 

用法如下

 

RC5Parameters 参数 = new RC5Parameters(new byte[] { 1, 2, 3 }, 12);
RC532Engine 引擎 = new RC532Engine();

BufferedBlockCipher brc = new BufferedBlockCipher(引擎);

brc.init(true, 参数); // true 加密  FALSE 解密
brc.processBytes(in, 0, a.length, out, 0);

 

ok ,现在 out 里的数据 就是 in 加密之后的了

不过现在有个小问题:这类是8字节8字节加密的,数据量必须被8整除,无可厚非,等俺有时间改改~

 

 

 

 

出电梯--->

 

(一字不差转自百科)

 

  RC5分组密码算法是1994由麻萨诸塞技术研究所的Ronald L. Rivest教授发明的,并由RSA实验室分析。它是参数可变的分组密码算法,三个可变的参数是:分组大小、密钥大小和加密轮数。在此算法中使用了三种运算:异或、加和循环。

  RC5是种比较新的算法,Rivest设计了RC5的一种特殊的实现方式,因此RC5算法有一个面向字的结构:RC5-w/r/b,这里w是字长其值可以是16、32或64对于不同的字长明文和密文块的分组长度为2w位,r是加密轮数,b是密钥字节长度。由于RC5一个分组长度可变的密码算法,为了便于说明在本文中主要是针对64位的分组w=32进行处理的,下面详细说明了RC5加密解密的处理过程:

  1、创建密钥组,RC5算法加密时使用了2r+2个密钥相关的的32位字: ,这里r表示加密的轮数。创建这个密钥组的过程是非常复杂的但也是直接的,首先将密钥字节拷贝到32位字的数组L中(此时要注意处理器是little-endian顺序还是big-endian顺序),如果需要,最后一个字可以用零填充。然后利用线性同余发生器模2初始化数组S:

  对于i=1到2(r+1)-1: (本应模 ,本文中令w=32)

  其中对于16位字32位分组的RC5,P=0xb7e1 Q=0x9e37

  对于32位字和64位分组的RC5,P=0xb7e15163 Q=0x9e3779b9

  对于64位字和128位分组,P=0xb7151628aed2a6b Q=0x9e3779b97f4a7c15

  最后将L与S混合,混合过程如下:

  i=j=0

  A=B=0

  处理3n次(这里n是2(r+1)和c中的最大值,其中c表示输入的密钥字的个数)

  2、加密处理,在创建完密钥组后开始进行对明文的加密,加密时,首先将明文分组划分为两个32位字:A和B(在假设处理器字节顺序是little-endian、w=32的情况下,第一个明文字节进入A的最低字节,第四个明文字节进入A的最高字节,第五个明文字节进入B的最低字节,以此类推),其中操作符<<<表示循环左移,加运算是模 (本应模 ,本文中令w=32)的。

  输出的密文是在寄存器A和B中的内容

  3、解密处理,解密也是很容易的,把密文分组划分为两个字:A和B(存储方式和加密一样),这里符合>>>是循环右移,减运算也是模 (本应模 ,本文中令w=32)的。

  RSA试验室花费了相当的时间来分析64位分组的RC5算法,在5轮后统计特性看起来非常好。在8轮后,每一个明文位至少影响一个循环。对于5轮的RC5,差分攻击需要 个选择明文;对10轮需要 个;对于12轮需要 个;对15轮需要 个。而对于64位的分组只有 个可能的明文,所以对于15轮或以上的RC5的差分攻击是失败的。在6轮后线性分析就是安全的了,Rivest推荐至少12轮,甚至可能是16轮。这个轮数可以进行选择。

  rfc 2040文档中列出了RC5算法密钥生成和加密实现的C代码,在此笔者参照文档中定义的算法结构,编写了用于对密文解密的程序代码(此代码经多次测试运行良好)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值