java ecb加密_各加密模式的演示(ECB,CBC) .

对于较长的明文进行加密需要进行分块加密,但是直接加密(ecb)不容易隐藏模式,用OpenCV写了个程序论证了一下

ECB

优点就是简单,可以并行计算,不会迭代误差

缺点就是隐藏不了模式

d701d9b6486ab9564b813e320f0135f7.pngCBC

需要初始化向量IV,来加密第一块C0.

有点就是比ECB好

缺点不利于并行计算、误差会迭代,还需要初始向量

1b39bfb66b111d9703e35d93bab631a8.png

6dd67ba12399771f47f11c9185197c9e.png

加密算法为简单的位翻转

#define bitrev(b) (((b)<<7)&0x80) |  \

(((b)<<5)&0x40) |  \

(((b)<<3)&0x20) |  \

(((b)<<1)&0x10) |  \

(((b)>>1)&0x08) |  \

(((b)>>3)&0x04) |  \

(((b)>>5)&0x02) |  \

(((b)>>7)&0x01)#define bitrev(b) (((b)<<7)&0x80) |  \

(((b)<<5)&0x40) |  \

(((b)<<3)&0x20) |  \

(((b)<<1)&0x10) |  \

(((b)>>1)&0x08) |  \

(((b)>>3)&0x04) |  \

(((b)>>5)&0x02) |  \

(((b)>>7)&0x01)ECB加密,就是直接分块进行加密

for(int i=0;iwidth;i++)

for(int j=0;jheight;j++)

grey->imageData[j*grey->width+i]=bitrev(grey->imageData[j*grey->width+i]);

cvNamedWindow("ecb");

cvShowImage("ecb", grey);for(int i=0;iwidth;i++)

for(int j=0;jheight;j++)

grey->imageData[j*grey->width+i]=bitrev(grey->imageData[j*grey->width+i]);

cvNamedWindow("ecb");

cvShowImage("ecb", grey);

CBC加密,与上一块密文异或后加密

for(int i=0;iwidth;i++)

for(int j=0;jheight;j++)

if(i!=0&&j!=0)

grey->imageData[j*grey->width+i]=bitrev(grey->imageData[j*grey->width+i]^grey->imageData[j*grey->width+i-1]);

else

grey->imageData[0]=grey->imageData[0]^IV;

cvNamedWindow("cbc");

cvShowImage("cbc", grey);

posted on 2013-08-08 20:52 奋斗成就男人 阅读(220) 评论(0)  编辑  收藏

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值