图像空域隐写技术:LSB及其改进
灰度图灰度图就是使用黑色,白色和它们之间不同程度的灰色表示的图片。一般来说灰度图的每个像素在计算机中使用8比特表示,也就是8比特位深,有0-255共256个颜色值。
下面是一张512*512像素8比特位深灰度图:
位图对于8比特表示的灰度图,高位比特对像素颜色的贡献明显高于低位比特。就像十进制111,明显百位的“1”是100,个位的“1”是1,100对111的贡献显然比1要大得多,其他进制包括二进制也是这个道理。
编写程序取不同比特位构建出新的位平面图就可以看清每个比特位对图片了贡献了。
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 读取灰度图像
img = cv2.imread('lena.bmp', cv2.IMREAD_GRAYSCALE)
# 获取图像的宽度和高度
height, width = img.shape
# 初始化一个全零矩阵,用于存储每个平面的像素值
planes = np.zeros((height, width, 8), dtype=np.uin ...
图像频域隐写技术:DCT系数隐写
关键词二值图/灰度图二值图非常简单,每一个像素使用1比特表示,0代表白,1代表黑。像二维码就可以这样表示节省空间。
灰度图相比于二值图,多了一些介于黑和白之间的灰色,一般每个像素由8比特表示0-255的范围。
黑白电视机放映的就是灰度图像,并不只是黑和白的二值图像。
RGBRGB是三原色:红Red,绿Green,蓝Blue的英文首字母缩写。
调整三个颜色的比例能够表示其他颜色,就和画图时的调色一样。
在计算机世界,图片由一个个像素点组成,而每个像素点的颜色由RGB表示。
对于一张24位色深的图片,计算机使用24比特表示每个像素的颜色,RGB三个通道各占8比特。因此RGB表示一个像素点就像这样(0,255,0)。
YUV尽管计算机广泛使用RGB表示颜色并以深入人心,但是YUV的颜色表示方法在工业界应用广泛。
YUV采用明亮度和色度编码颜色,其中Y表示明亮度(Luminance,Luma),而U和V表示色度(Chrominance,Chroma)。其中明度分量可以和色度分量隔离,单独表示一张黑白图片,也就是这点原因YUV可以兼容以前的一些黑白屏幕的设备。另外,由于人眼其实对明度 ...
无题
blind watermark概述blind_watermark是github上的一个图片水印开源项目,获得5.3K的收藏,几乎是github上最受欢迎的图片水印项目。
blind_watermark是不可见盲水印,这意味着向图片添加水印并不会被人察觉,并且提取水印不需要原始图片,只需要嵌入水印后的图片。blind_watermark在频域进行水印嵌入,这一定程度上保证了该水印框架的不可见性和鲁棒性。blind_watermark支持嵌入的水印类型有二进制数据,字符串,图片,支持的载体图片为三通道的任意图片,另外通过理论计算的出blind_watermark的容量为:图片像素值总数/64 (bit)。根据作者给出的示例,blind_watermark在多种攻击上表现出色,包括旋转,裁剪,遮挡,椒盐噪声,亮度改变。
blind watermark前置知识blind_watermark使用多种技术,包括DWT(离散小波变换),DCT(离散余弦变换),(SVD)奇异值分解。
离散小波变换:DWT小波变换使用母小波在时间和频率上移动作为一组基来表达原始信号的信息,并将空域信息映射到小 ...
信息隐藏
技术概述信息隐藏有两个具体的应用方面,隐写术和数字水印。
隐写术用于秘密的隐藏在正常的载体文件中,比如文档,图片,音频,视频等文件,为了秘密的传输信息而不被发现。
数字水印一般用作版权保护,将水印可见或者不可见的隐写于载体文件中,当发生盗版时可以溯源盗版方。然而对抗数字水印的对抗技术也很多,比如加入各种噪声,使用手机拍摄文件,这些都是数字水印需要克服的问题。
课程笔记(⊙o⊙)…
视频资料隐写术鉴赏
jpeg-dct
【中英双字】JPEG算法原理 jpeg图片是如何压缩的?
JPEG不可思议的压缩率——归功于信号处理理论 @圆桌字幕组
JPEG 有损压缩 离散余弦变换 DCT 一条视频讲清楚
“电子包浆”是因为被反复压缩吗?其实没那么简单
博客链接1链接2链接3
论文:Techniques for data hiding
论文概述Techniques for data hiding
Patchwork算法理论基础在图像中随机选取A和B两个点,假设a为A点的亮度,b为B点的亮度,那么:经过多次重复这个操作,S的期望值应该为0。
具体计算:略。。
算法实现
使用伪随机生成器生成秘钥(ai,bi)。
将a的亮度提高,b的亮度降低(1/256-5/256d)。
重复上面步骤n次。(通常来说是10000次)。
WavMark:Watermarking for Audio Generation
WavMark: Watermarking for Audio GenerationWavMark简介WavMark是一种创新的音频水印框架,可以在仅仅1秒的音频片段内编码多达32位的水印。该水印对人类的感官来说是难以察觉的,并且对各种攻击表现出很强的鲁棒性。它可以作为合成声音的有效标识符,在音频版权保护方面具有更广泛的应用潜力。Wavmark迭代的将相同水印嵌入到宿主音频的一秒片段中,确保全时段的保护。即使音频被剪切,也可以使用任何完整的片段进行解码。因此,该框架具有高度的灵活性,允许多个水印段的组合,以实现更高的鲁棒性和扩展的容量。利用10到20秒的音频作为载体,WavMark在10种常见攻击中平均误码率(BER)为0.48%,并且维持了优秀的不可感知性(SNR=36.85,PESQ=4.21)。
WavMark框架
音频表示WavMark使用采样率为16kHZ的单通道音频作为载体,编码单位长度(EUL)设置为一秒。因此原始输入被表示为长度为16000的一位波形向量记为:x_wave,进一步使用短时傅里叶变换(STFT)将其转换为频谱图:
水印表示水印消息由 ...
SEED:Spectre_Attack
你可以到SEED官网获取实验资料:Spectre Attack Lab
幽灵攻击介绍Intel官方解释CPU幽灵/熔断漏洞 | 中英双语字幕
幽灵攻击被发现于2017年并在2018年1月被公开,幽灵攻击允许特殊设计的恶意程序访问其他程序的内存空间,窃取数据。由于幽灵攻击是CPU设计的漏洞,并且这个设计缺陷广泛存在于当时大部分的处理器中,因此修复十分困难,除非更换电脑的CPU。
基于缓存加速的侧信道攻击侧信道攻击侧信道攻击利用设备或者系统在处理信息时泄露的物理信息反映出秘密信息,泄露的物理信息可以是时间,耗能,发热等。
缓存加速当内存数据被加载到缓存后,再次访问这个数据时间将会被缓存加速。
下面代码演示缓存加速的效果。
代码:创建一个数组并初始化,将数组缓存清空;对array(3*4096)和array(7*4096)进行赋值,因此这两个元素被载入缓存;遍历数组获取访问每个元素需要的时间,由于array(3*4096)和array(7*4096)两个元素在缓存中,因此这访问这两个元素的时间应该更短。
#include <emmintrin.h>
#include ...
Web安全:SQL注入
参考文章:SQL注入原理
一. SQL注入概述直接原因是没有对用户输入做检查,导致用户输入恶意SQL语句。根本原因是违反数据和代码分离的设计原则,将用户恶意输入当做代码进行执行。
有以下解决方案:
输入检查
预编译
其中预编译符合数据和代码分离的原则,提前为输入数据提供类型,编译时为数据部分预留空间。这样用户输入智能为某一数据类型,就解决了这个问题。
数据和代码分离原则,先用一个数据类型接收用户输入,再用代码操纵这个数据类型。预编译是一种实现方式。
二. SQL注入实例情景一:输入账号,密码登录后端查询语句:*一般来说#{}这种形式是进行预编译的,而{{}}则没有。
查询语句:
select * from user where username='{{}}' and password='{{}}'
后端代码:
if affect_row==1:
return "succeed"
els ...
Web开发:MySQL
一. MySQL概述MySQL启动&终止启动服务net start mysql
终止服务net stop mysql
登录:如果找不到环境变量(路径),则在SQL文件的bin目录下
启动不成功也可能是mysql服务没开
mysql -u root -p
MySQL操作语言数据库:show databases
use xxx
show tables
查:select * from table
增:insert into table values(int,"str")
删:delete from table where id=int
改:update table set col="xxx" where id=int
SEED:XSS
你可以到SEED官网获取实验资料:Buffer-Overflow Attack Lab (Server Version)
XSS概述……
实验概述
实验环境设置
DNS设置:使用命令sudo vim /etc/hosts编辑本地DNS配置,需要注意的是多个域名是可以定向到同一个IP地址的,因为Web服务器可以通过HTTP协议的hosts字段来区分访问的服务。
启动docker服务:使用命令dcbuild和dcup启动docker配置的服务,一般来说docker启动服务没有什么问题,以下是服务成功启动的截图:
准备工具“HTTP Header Live”:
任务
在浏览器提示框发布恶意消息使用Java Script代码写一段这样的功能很简单:
alert(‘XSS’);是JS代码部分,script标签在html中声明这是一段JS代码。另外,这当代码过长时可以使用链接的方法方法,将指定路径的JS代码记载执行:
下面需要将这段恶意js代码注入到该网站中,登录s ...