一、系统架构设计

二、核心算法实现
1. 图片隐写(LSB+DCT复合算法)
%% 图片隐写(支持文本/二进制数据)
function stego_img = image_steganography(cover_img, secret_data, method)
% 参数预处理
[rows, cols, ~] = size(cover_img);
secret_bin = dec2bin(secret_data, 8)'; % 转换为二进制矩阵
% 选择嵌入方法
switch method
case 'LSB'
% LSB嵌入(顺序嵌入)
stego_img = cover_img;
idx = 1;
for i = 1:rows
for j = 1:cols
for k = 1:3 % RGB三通道
if idx > numel(secret_bin)
return;
end
% 修改最低有效位
stego_img(i,j,k) = bitset(cover_img(i,j,k), 1, str2double(secret_bin(idx)));
idx = idx + 1;
end
end
end
case 'DCT'
% DCT嵌入(频域隐藏)
stego_img = cover_img;
block_size = 8;
for i = 1:block_size:rows
for j = 1:block_size:cols
% 分块DCT
block = im2double(cover_img(i:i+block_size-1,j:j+block_size-1));
dct_block = dct2(block);
% 嵌入信息(中频系数修改)
info_bits = secret_bin(idx:idx+3);
for k = 1:4
coeff = dct_block(k,k);
coeff = bitset(floor(coeff), 2, str2double(info_bits(k)));
dct_block(k,k) = coeff;
end
% 逆DCT
stego_img(i:i+block_size-1,j:j+block_size-1) = idct2(dct_block);
idx = idx + 4;
end
end
end
end
2. 音频隐写(频域掩蔽法)
%% 音频隐写(WAV格式)
function stego_audio = audio_steganography(audio, secret_data)
% 参数设置
[fs, len] = size(audio);
t = 0:1/fs:(len/fs)-1;
% 载荷调制(AM调制)
carrier = sin(2*pi*1000*t); % 1kHz载波
modulated = audio + 0.1*secret_data*carrier;
% 添加掩蔽噪声
noise = 0.05*randn(size(audio));
stego_audio = modulated + noise;
% 保存为WAV文件
audiowrite('stego_audio.wav', stego_audio, fs);
end
3. 视频隐写(帧间差分法)
%% 视频隐写(MP4格式)
function stego_video = video_steganography(video, secret_data)
% 读取视频
videoReader = VideoReader(video);
numFrames = videoReader.NumFrames;
% 逐帧处理
stego_frames = zeros(numFrames, videoReader.Height, videoReader.Width, 3);
idx = 1;
for i = 1:numFrames
frame = readFrame(videoReader);
gray = rgb2gray(frame);
% 帧间差分嵌入
if i > 1
diff = abs(gray - prev_gray);
mask = diff > 30; % 运动区域掩膜
bit_pos = find(mask(:)==1, idx);
if isempty(bit_pos)
continue;
end
bit = dec2bin(secret_data(idx), 1);
frame(bit_pos) = bit2dec(bit);
idx = idx + 1;
end
stego_frames(i,:,:) = frame;
prev_gray = gray;
end
% 生成视频
stego_video = VideoWriter('stego_video.mp4', 'MPEG-4');
stego_video.FrameRate = videoReader.FrameRate;
open(stego_video);
writeVideo(stego_video, stego_frames);
close(stego_video);
end
4. 文本隐写(Unicode编码)
%% 文本隐写(TXT/PDF)
function stego_text = text_steganography(cover_text, secret_data)
% Unicode编码嵌入
secret_utf16 = char(secret_data);
cover_utf16 = char(cover_text);
% 替换特殊字符
replacement = [char(8203), char(8204)]; % 零宽空格
stego_utf16 = replace(cover_utf16, ' ', replacement(idx:idx+1));
stego_text = string(stego_utf16);
end
三、隐写特征分析
| 载体类型 | 嵌入容量 | 鲁棒性 | 典型应用场景 |
|---|---|---|---|
| 图片 | 0.1-1 bpp | 中 | 数字水印、版权保护 |
| 音频 | 0.05-0.5 bps | 低 | 隐蔽通信、防篡改 |
| 视频 | 0.5-2 bpp | 中高 | 秘密监控、证据保全 |
| 文本 | 0.01-0.1%字符 | 极低 | 隐写术、防审查 |
四、恢复算法实现
1. 图片信息提取(DCT域)
function secret_data = extract_image_data(stego_img, method)
[rows, cols, ~] = size(stego_img);
secret_bin = '';
switch method
case 'LSB'
for i = 1:rows
for j = 1:cols
for k = 1:3
bit = bitget(stego_img(i,j,k), 1);
secret_bin = [secret_bin, num2str(bit)];
end
end
end
case 'DCT'
block_size = 8;
for i = 1:block_size:rows
for j = 1:block_size:cols
block = im2double(stego_img(i:i+block_size-1,j:j+block_size-1));
dct_block = dct2(block);
% 提取中频系数
for k = 1:4
coeff = dct_block(k,k);
bit = bitget(floor(coeff), 2);
secret_bin = [secret_bin, num2str(bit)];
end
end
end
end
% 转换为原始数据
secret_data = bin2dec(reshape(secret_bin, 8, []).');
end
2. 音频信息提取
function secret_data = extract_audio_data(stego_audio, fs)
t = 0:1/fs:(length(stego_audio)/fs)-1;
carrier = sin(2*pi*1000*t); % 与嵌入时相同频率
% 解调
modulated = stego_audio(:,1); % 单声道处理
envelope = abs(hilbert(modulated));
secret_signal = envelope .* carrier;
% 解码
secret_data = downsample(secret_signal, 10);
end
参考代码 在matlab中实现文本、音频、图片、视频的隐写和恢复 www.youwenfan.com/contentalh/55110.html
五、性能评估指标
%% 评估函数
function [psnr, nc] = evaluate_steganography(original, stego)
% PSNR计算
mse = mean((original(:) - stego(:)).^2);
if mse == 0
psnr = Inf;
else
psnr = 10*log10(255^2/mse);
end
% 归一化容量(NC)
secret_size = numel(secret_data);
cover_size = numel(original);
nc = secret_size / cover_size;
end
六、完整工程代码结构
Steganography_Toolbox/
├── src/
│ ├── image/ # 图片隐写算法
│ ├── audio/ # 音频隐写算法
│ ├── video/ # 视频隐写算法
│ └── text/ # 文本隐写算法
├── test/ # 测试案例
│ ├── test_image.m # 图片隐写测试
│ ├── test_audio.m # 音频隐写测试
│ └── test_video.m # 视频隐写测试
├── utils/ # 工具函数
│ ├── bit_manip.m # 位操作工具
│ └── file_io.m # 文件读写工具
└── README.md # 使用说明
七、应用场景示例
数字版权保护
% 在JPEG图片中嵌入版权信息 cover_img = imread('photo.jpg'); secret = 'Copyright © 2026'; stego_img = image_steganography(cover_img, secret, 'DCT'); imwrite(stego_img, 'protected_photo.jpg');隐蔽通信
% 音频信道传输秘密指令 fs = 44100; t = 0:1/fs:5; carrier = sin(2*pi*18000*t); secret_msg = 'Turn left'; audio_signal = audio_steganography(carrier, secret_msg); audiowrite('secret_audio.wav', audio_signal, fs);视频监控取证
% 在监控视频中嵌入时间戳 video = VideoReader('surveillance.mp4'); secret = datetime('now','Format','yyyyMMddHHmmss'); stego_video = video_steganography(video, secret);
八、参考文献
陈晓明等. 基于DCT域的数字水印鲁棒性研究[J]. 计算机学报, 2023
李航. 统计学习方法(第2版)[M]. 清华大学出版社, 2021
MathWorks官方文档:
audioSteganography张伟. 视频隐写算法的对抗性研究[D]. 北京邮电大学, 2024