Skip to content

PRA-TPE: Perfectly recoverable approximate thumbnail-preserving image encryption

Notifications You must be signed in to change notification settings

RMDE/ImageEncipher

Repository files navigation

基于差分扩展的缩略图保持加密技术

环境配置

  • matlab

基本原理

  • 以块为单位,将块分为调整区和嵌入区,利用差分扩展将调整区中的像素的MSB嵌入嵌入区,加密后通过改变调整区像素的MSB使块平均像素与原始平均像素值基本一致从而达到缩略图保持。

应用场景

  • 云端的图片保存等

具体步骤

一.腾空间

对块进行处理

  1. 记录调整区的MSB
  2. 对嵌入区的像素进行分类
    • 每两个像素为一组
    • 计算两个像素之间的平均值以及差值
      • l = [x+y]/2
      • h = x-y
    • 通过判断 |2h+b| , |2[h/2]+b| 与 min(2(255-l),2l+1) 之间的关系,从而对每组像素进行分类
      • EZ :h=0 || h=-1
      • EN : |2*h+b| <= min(2(255-l), 2l+1) 即可拓展集合
      • CN : |2*[h/2]+b| <= min(2(255-l), 2l+1 即可变集合
      • NC : 不满足上述两个条件,即不可变区
    • 考虑到空间因素,将EN分为EN1和EN2两部分一部分作为可拓展部分,一部分作为可变部分
  3. 生成待嵌入数据
    • locate-map用于标记可拓展像素组
    • 对属于EN2和CN集合的像素组的h的LSB部分进行收集(h=1 || h=-2时不用记录)
    • 调整区的MSB部分
      • (若MSB>1,则将每个像素的同一位一起保存,例如将每个像素的最高位收集在一起,然后将次高位收集存在所有最高位之后)
    • 将locate-map以及MSB部分进行游程编码来进行压缩
    • 整合为块嵌入数据: data = Encode(locate-map) + LSB + Encode(MSB)
  4. 进行预备工作
    • 对于可拓展像素组
      • h' = 2*h
    • 对于可变像素组
      • h' = 2*[h/2]
    • x' = l+[(h'+1)/2]
    • y' = l-[h'/2]

对图像整体进行处理

  1. 整合待嵌入数据
    • 对块内得到的数据信息进行编码,这里采用的是当遇到连续8个‘1’时,在后面加上‘0’
    • 对块与块数据之间插入分隔符‘01111111110’用于区别
  2. 对图像整体进行数据嵌入
    • 通过判断 |2*[h/2]+b| 与 min(2(255-l),2l+1) 之间的关系,从而对每组像素进行分类
      • CH :|2*[h/2]+b| <= min(2(255-l), 2l+1 即可变集合
      • NC :不可变区
    • 对于可变像素组
      • h' = h+b (b为待嵌入比特)
      • 若数据已经嵌入完成,则不再进行嵌入操作
    • x' = l+[(h'+1)/2]
    • y' = l-[h'/2]

二.加密

  • 此处用简单的流加密方式进行加密,当然可以采用更安全的加密方式(包括会改变像素位置的加密方式,但一定要记录可调整区像素位置用于调整)

三.调整

  • 通过不断改变调整区像素的MSB,找出所有可能中最接近于原图像块平均像素的一组数据(即遍历查找)

四.解密

  • 此处和加密一致,直接将加密过程用于解密即可

五.提取

对图像整体进行处理

  1. 将嵌入区的像素组分类
    • 两个像素一组
    • 计算两个像素之间的平均值以及差值
      • l = [x+y]/2
      • hh = x-y
    • 通过判断 |2*[h/2]+b| 与 min(2(255-l),2l+1) 之间的关系,从而对每组像素进行分类
      • CH :|2*[h/2]+b| <= min(2(255-l), 2l+1 即可变集合
      • NC :不可变区
  2. 可变集合CH中的hh的LSB位即为嵌入的信息
  3. 对提取的信息进行解码,并根据分隔符将整体嵌入信息分解为各个块的嵌入信息

对块进行处理

  1. 计算出嵌入信息各组成部分压缩前的大小
    • locate-map:(blocksize-2)*(blocksize-2)/2
    • MSB:blocksize*4-4
    • LSB:size(data) - size(locate-map) - size(MSB)
  2. 对经过压缩的嵌入数据进行还原
    • 从data的首部开始:边还原MAP边对已经还原的MAP元素个数进行计算,当达到locate-map原大小时停止
    • 从data的尾部开始:边还原MSB边对已经还原的MSB元素个数进行计算,当达到MSB原大小时停止
    • 两部分中间的即为LSB部分
  3. 将嵌入区的像素组分类
    • 两个像素一组
    • 计算两个像素之间的平均值以及差值
      • l = [x+y]/2
      • hh = x-y
    • 通过判断 |2*[h/2]+b| 与 min(2(255-l),2l+1) 之间的关系,从而对每组像素进行分类
      • CH :|2*[h/2]+b| <= min(2(255-l), 2l+1 即可变集合
      • NC :不可变区
  4. 对可变区的像素进行还原
    • 对于属于EZ & EN1的像素组(即locate-map中值为1): h = [hh/2]
    • 0 <= hh <= 1: h = 1
    • 12 <= hh <= -1: h = -2
    • else: h = 2*[hh/2]+LSB
    • x = l+[(h+1)/2]
    • y = l-[h/2]
  5. 对调整区像素进行还原
    • pixel = pixel(8-MSB)+MSB

About

PRA-TPE: Perfectly recoverable approximate thumbnail-preserving image encryption

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published