数字图像加密算法
2014-04-15 15:00
127 查看
本文主要介了四种加密:随机扰乱图片信息的行或列进行加密;随机扰乱图片信息的像素点进行加解密;缩放图片信息的像素点进行加解密;以上都属于加密后立即进行解密。再就是利用混沌序列进行加解密,使用了固定算法,通过加解密密钥形成了加密后的非立即解密方法。
1.随机打乱各行进行数字图像加密:
2.随机打乱各列进行数字图像加密:
3.同时打乱各行和各列进行数字图像加密
4.随机打乱像素点进行数字图像加密
加密效果比较好,但加解密密时间呈指数倍增加。
5.像素点的RGB值缩放进行数字图像加密
加密的效果会随着缩放的倍数增加会更好,但易于破解。
6.混沌序列数字图像加密
解密程序2:
1.随机打乱各行进行数字图像加密:
%随机打乱各行进行数字图像加密 clear RGB = imread('bb2.jpg'); s = size(RGB); %不放回的均匀分布的从1到s(1)到整数,个数为s(1)抽样 r = randsample(s(1), s(1)); RGBS = RGB(r, :, :); j = 1; f = 1:length(r); while j <= length(r) f(j) = find(r == j); j = j + 1; end RGBE = RGBS(f, :, :); subplot(1, 2, 1); imshow(RGBS); title('加密后'); subplot(1, 2, 2); imshow(RGBE); title('解密后');
2.随机打乱各列进行数字图像加密:
%随机打乱各列进行加密 clear RGB = imread('bb2.jpg'); s = size(RGB); r = randsample(s(2), s(2)); RGBS = RGB(:, r, :); i = 1; f = 1:length(r); while i <= length(r) f(i) = find(r == i); i = i + 1; end RGBE = RGBS(:, f, :); subplot(1, 2, 1);imshow(RGBS);title('加密后'); subplot(1, 2, 2);imshow(RGBE);title('解密后');
3.同时打乱各行和各列进行数字图像加密
%同时打乱各行和各列进行数字图像加密 clear; RGB = imread('bb2.jpg'); s = size(RGB); r = randsample(s(1), s(1)); RGBS = RGB(r, :, :); c = randsample(s(2), s(2)); RGBSS = RGBS(:, c, :); i = 1; f = 1:length(c); while i <= length(c) f(i) = find(c == i); i = i + 1; end j = 1;g = 1:length(r); RGBE = RGBSS(:, f, :); while j <= length(r) g(j) = find(r == j); j = j + 1; end RGBEE = RGBE(g, :, :); subplot(1, 2, 1); imshow(RGBSS); title('加密后'); subplot(1, 2, 2); imshow(RGBEE); title('解密后');
4.随机打乱像素点进行数字图像加密
加密效果比较好,但加解密密时间呈指数倍增加。
%随机打乱像素点进行数字图像加密 clear; RGB = imread('bb2.jpg'); s = size(RGB); n = s(1) * s(2) * s(3); r = randsample(n, n); RGBS = RGB(r); RGBSS = reshape(RGBS, s(1), s(2), s(3)); i = 1; f = 1:n; while i <= n f(i) = find(r == i); i = i + 1; end RGBE = RGBS(f); RGBEE = reshape(RGBE, s(1), s(2), s(3)); subplot(1, 2, 1); imshow(RGBSS); title('加密后'); subplot(1, 2, 2); imshow(RGBEE); title('解密后');
5.像素点的RGB值缩放进行数字图像加密
加密的效果会随着缩放的倍数增加会更好,但易于破解。
%通过像素点的RGB值的缩放进行数字图像加密 clear; RGB = imread('lenna.jpg'); s = size(RGB); r = rand(s(1), s(2), s(3)) * 10; RGBD = im2double(RGB); RGBS = RGBD .* r; RGBE = RGBS ./ r; subplot(1, 2, 1); imshow(RGBS); title('加密后'); subplot(1, 2, 2); imshow(RGBE); title('解密后');
6.混沌序列数字图像加密
%混沌序列数字图像加密程序,输入的加密密钥在0~1范围的数 clear; RGB = imread('bb2.jpg', 'jpg'); s = size(RGB); N = s(1) * s(2) * s(3); %m = 1:N; m(1) = input('输入加密密钥: '); disp('加密中...'); for i = 1:N-1 m(i+1) = 4 * m(i) - 4 * m(i)^2; end m = mod(m * 1000, 256); m = uint8(m); n = 1; %RGBS = zeros(s(1), s(2), s(3)); for i = 1:s(3) for j = 1:s(2) for k = 1:s(1) RGBS(k, j, i) = bitxor(m(n), RGB(k ,j, i)); n = n + 1; end end end disp('加密成功!'); imwrite(RGBS, '加密后的bb2.jpg','jpg'); subplot(1,2 ,1);imshow(RGBS);title('加密后的图片');
%混沌加密的解密程序,输入的解密密钥即是加密密钥 %注意:使用非立即加密和解密的算法进行数字图像加密时,当对jpg格式的图像进行加密后 %的写入,再在解密程序中读入加密后的jpg的图片,图片会部分失真,而利用bmp格式的图像 %进行写入和读出时就不会出现这样的情况,由于jpg格式的图像是有损压缩,虽然是同一张 %图像写入和读出的数字图像的RGB值已经不同了;与此相反bmp格式的图像是无损压缩,因此 %不会出现这样的情况。 %clear; RGBS1 = imread('加密后的bb2.jpg', 'jpg'); s1 = size(RGBS1); N1 = s1(1) * s1(2) * s1(3); %m = 1:N; m1(1) = input('输入解密密钥: '); disp('解密中...'); for i1 = 1:N1-1 m1(i1+1) = 4 * m1(i1) - 4 * m1(i1)^2; end %RGBE = zeros(s(1), s(2), s(3)); m1 = mod(m1 * 1000, 256); m1 = uint8(m1); n1 = 1; for i1 = 1:s1(3) for j1 = 1:s1(2) for k1 = 1:s1(1) %这里不能使用RGBS1,由于jpg是有损压缩格式,读入和读出存在误差; %故使用加密后没写入jpg格式时的RGB; %RGBE(k1, j1, i1) = bitxor(m1(n1), RGBS1(k1, j1, i1)); RGBE(k1, j1, i1) = bitxor(m1(n1), RGBS(k1, j1, i1)); n1 = n1 + 1; end end end disp('解密成功!'); imwrite(RGBE, '解密后的bb2.jpg', 'jpg'); subplot(1, 2, 2); imshow(RGBE); title('解密后的图片');
解密程序2:
%混沌加密的解密程序,输入的解密密钥即是加密密钥 %注意:使用非立即加密和解密的算法进行数字图像加密时,当对jpg格式的图像进行加密后 %的写入,再在解密程序中读入加密后的jpg的图片,图片会部分失真,而利用bmp格式的图像 %进行写入和读出时就不会出现这样的情况,由于jpg格式的图像是有损压缩,虽然是同一张 %图像写入和读出的数字图像的RGB值已经不同了;与此相反bmp格式的图像是无损压缩,因此 %不会出现这样的情况。 %clear; RGBS1 = imread('加密后的bb2.jpg', 'jpg'); s1 = size(RGBS1); N1 = s1(1) * s1(2) * s1(3); %m = 1:N; m1(1) = input('输入解密密钥: '); disp('解密中...'); for i1 = 1:N1-1 m1(i1+1) = 4 * m1(i1) - 4 * m1(i1)^2; end %RGBE = zeros(s(1), s(2), s(3)); m1 = mod(m1 * 1000, 256); m1 = uint8(m1); n1 = 1; for i1 = 1:s1(3) for j1 = 1:s1(2) for k1 = 1:s1(1) %这里不能使用RGBS1,由于jpg是有损压缩格式,读入和读出存在误差; %故使用加密后没写入jpg格式时的RGB; RGBE(k1, j1, i1) = bitxor(m1(n1), RGBS1(k1, j1, i1)); %RGBE(k1, j1, i1) = bitxor(m1(n1), RGBS(k1, j1, i1)); n1 = n1 + 1; end end end disp('解密成功!'); imwrite(RGBE, '解密后的bb2.jpg', 'jpg'); subplot(1, 2, 2); imshow(RGBE); title('解密后的图片');
相关文章推荐
- 谈谈数字图像的缩放算法
- 数字图像处理:各种变换滤波和噪声的类型和用途总结
- 数字图像处理:第三章 灰度直方图
- 数字图像处理:第十七章 纹理分析
- 数字图像处理:第十八章 彩色图象处理
- 数字图像处理之二维码图像提取算法(一)
- Win8Metro(C#)数字图像处理--2.5图像亮度调整
- Interactive Digital Photomontage --数字图像蒙太奇--学习(1)
- Win8Metro(C#)数字图像处理--2.26图像减法
- 数字图像学习4(图像的浮雕效果)
- Win8Metro(C#)数字图像处理--2.34直方图规定化
- 转载:数字图像去噪典型算法及matlab实现 (http://gaochaojs.blog.51cto.com/812546/243961)
- Win8 Metro(C#)数字图像处理--2.37Wallis图象锐化
- 用ServletJSP动态生成英文、数字图像验证码
- 数字图像处理:各种变换滤波和噪声的类型和用途总结
- 数字图像处理1----概述
- 【数字图像处理】图像金字塔
- 数字图像处理--空间滤波
- 数字图像处理编程入门
- 详析数字图像中高斯模糊理论及实现