python-des图像加密问题汇总

1,  des加密常用两个库,pyDes,超慢,测试下来太费时间,放弃。另一个,

from Crypto.Cipher import DES, 速度超快,建议使用这个,安装方法也简单,pip install pycryptodome。

2,图像数据获取:

with open(os.path.join(dir,path),'rb') as f:

    bimg=f.read()

3,解密:

cipher2 =  DES.new(b'8位加密数据', DES.MODE_CBC, b'8位初始化向量')#DES.new(DES_CODE.encode('utf-8'), DES.MODE_OFB,DES_CODE.encode('utf-8'))
outimg = cipher2.decrypt(bimg) 

4,转图:

img_array=np.frombuffer(outimg,dtype=np.uint8)
newW= (w+3)//4*4
img=img_array[:h*newW].reshape([h,newW])
starttime = time.clock()
cv2.imwrite('11.jpg',img[:,:w])#这里注意 虽然是 hw的输入,但是内存中是 h* int(w+3/4)*4的存放数据,而最后又多出必须是8的倍数,然后w不是4的倍数需转回去,所以利用了切片-》reshap-》再切片
print('time is: '+str(time.clock()-starttime))

5,问题(注意本题目中我的biBitCount=8),问题1,出现每次加密的原始数据是 h*w 后,如w是8的倍数,那么加密完成后 h*w+8,查询资料说是padding问题,即总位数不是8位的8位补齐,是8位的再加个8位,我测了下,新增的8位解密后是8个8(测试发现解密的位数会补充8的倍数,其中多补充了几位即为数字几,如上补8位 每位是8,若补4位,则每位是4).问题2,出现每次加密的原始数据是 h*w 后,如w不是8的倍数,那么加密完成后是:h*(int((8*w+31)/32))*32/8+x,或者 h*(w+3)//4*4+x一样不是8的倍数补齐8,是8的倍数+8。(好好理解:Windows规定一个扫描行所占的字节数必须是4的倍数(即以long为单位),不足的以0填充)  注意 整除python用法,当用c++ 等简单/取整即可,但是对于python //表示取小的,注意负数的情况,4//3=1,-4//3=-2 注意不是-1,切记!!!另外int(0.9)=0,int(-0.9)=0,python中强制转化是向0进发的。问题3,为什么file open后利用 f.read()和f.readinto()不一样,因为f.read获取的是object类型,而bytearray是不行的,。获取大小的方法,1,len(f.read()) 2,os.path.getsize(filename)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值