图像加密的重要性可想而知,每个人都会有自己的小秘密,通过图像加密的方法可以保护自己的照片等的安全。

一般情况下,图像加密可以分为以下几个步骤:

1.选择图像加密算法

2.根据算法获取秘钥

3.根据保存的秘钥解密

图像加密的处理方式多为对图像中的像素点进行处理,有的处理方式不改变灰度直方图的信息(易破解),然后更高级的处理方式使得原来的灰度直方图信息也发生改变(比如变得均衡化了)。

下面介绍自己亲自测试的2种图像加密算法:

1.行列像素点置乱方法,该方法将原图中的像素信息进行了重新排布——置乱。通过一一对应的关系可以恢复原来的图像,此时的秘钥即为行列变换的映射向量Mchange和Nchange。

简单的MATLAB程序如下:

clc,clear all,close all
Lena = imread('Lena512.bmp');
figure;imshow(Lena)
title('原图')
[M,N]   = size(Lena);
Rm      = randsample(M,M)';
Mchange = [1:1:M;Rm];
Rn      = randsample(N,N)';
Nchange = [1:1:N;Rn];

%打乱行顺序
Lena (Mchange(1,:),:) = Lena (Mchange(2,:),:);
figure;imshow(Lena)
title('行加密后图像')
%打乱列顺序
Lena (:,Nchange(1,:)) = Lena (:,Nchange(2,:));
figure;imshow(Lena)
title('列加密后图像')
%列变换还原
Lena (:,Nchange(2,:)) = Lena (:,Nchange(1,:));
figure;imshow(Lena)
title('列解密后图像')
%行变换还原
Lena (Mchange(2,:),:) = Lena (Mchange(1,:),:);
figure;imshow(Lena)
title('解密后图像')

2.基于混沌的图像加密方法,产生2个Logistic混沌序列,改造2个Logistic,得到两个y序列,由yl和y2序列对原图像进行值替代加密。秘钥为混沌系统的初始状态值。

可参考的MATLAB程序如下:

%加密方法,混沌序列
clc,clear all,close all
A=imread('Lena512.bmp'); 
imshow(A); title('原图') 
[M,N]=size(A);%原始图像A的尺寸一MxN 
u1=4;u2=4;x1(1)=0.2;x2(1)=0.7; 
sumA=sum(sum(A));  
k=mod(sumA,256)*1.0/255; 
x1(1)=(x1(1)+k)/2; x2(1)=(x2(1)+k)/2;  
y1(1)=(1/3.1415926)*asin(sqrt(x1(1))); 
y2(1)=(1/3.1415926)*asin(sqrt(x2(1)));  
for i=1:1:M*N-1 %产生2个Logistic混沌序列   
    x1(i+1)=u1*x1(i)*(1-x1(i));   
    x2(i+1)=u2*x2(i)*(1-x2(i)); 
end
for i=1:1:M*N  %改造2个Logistic,得到两个y序列
      y1(i)=(1/3.1415926)*asin(sqrt(x1(i)));   
      y2(i)=(1/3.1415926)*asin(sqrt(x2(i))); 
end
n=1;  
for i=1:1:M   %由yl和y2序列对原图像进行值替代加密     
    for j=1:1:N        
        if mod(n,1)==0           
            k(n)=mod(floor(y1(n)*10^15),256);       
        else
            k(n)=mod(floor(y2(n)*10^15),256);       
        end
        A1(i,j)=bitxor(A(i,j),k(n));  %得到加密像素      
        n=n+1;     
    end
end
figure,imshow(A1);title('混沌加密图像')  %输出得到的加密图像 
n=1;  
for i=1:1:M     
    for j=1:1:N          
        if mod(n,1)==0             
            k(n)=mod(floor(y1(n)*10^15),256);         
        else
            k(n)=mod(floor(y2(n)*10^15),256);         
        end
        A2(i,j)=bitxor(A1(i,j),k(n));  %得到加密像素      
        n=n+1;     
    end
end
figure,imshow(A2);title('解密图像')  %输出得到的解密图像

---------------------
作者:清风徐行
来源:CSDN
原文:https://blog.csdn.net/u013626386/article/details/39736611
版权声明:本文为博主原创文章,转载请附上博文链接!

matlab数字图像简单的加密方法的更多相关文章

  1. iOS里常见的几种信息编码、加密方法简单总结

    一.MD5 MD5编码是最常用的编码方法之一,是从一段字符串中通过相应特征生成一段32位的数字字母混合码. MD5主要特点是 不可逆,相同数据的MD5值肯定一样,不同数据的MD5值不一样(也不是绝对的 ...

  2. Java实现一个简单的加密解密方法

    Crypto是Java语言写的一个简单的加密解密方法. 使用方法: 加密方法 String cipherte=Enande.encrypt(content, pass): 解密方法 Enande.de ...

  3. Java中常用的加密方法(JDK)

    加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容.大体上分为双向加密和单向加密,而双向加密又分为对称加密和非对称加密(有些 ...

  4. C# 加密总结 一些常见的加密方法

    C# 加密总结 一些常见的加密方法 一 散列数据 代码如下: ? private static string CalculateSHA512Hash(string input)         {   ...

  5. [转载] Java中常用的加密方法

    转载自http://www.iteye.com/topic/1122076/ 加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的 ...

  6. iOS常见的几种加密方法(base64.MD5.Token传值.系统指纹验证。。加密)

    普通加密方法是讲密码进行加密后保存到用户偏好设置中 钥匙串是以明文形式保存,但是不知道存放的具体位置 一. base64加密 base64 编码是现代密码学的基础 基本原理: 原本是 8个bit 一组 ...

  7. Node.js进阶:5分钟入门非对称加密方法

    前言 刚回答了SegmentFault上一个兄弟提的问题<非对称解密出错>.这个属于Node.js在安全上的应用,遇到同样问题的人应该不少,基于回答的问题,这里简单总结下. 非对称加密的理 ...

  8. iOS 几种加密方法

    iOS常见的几种加密方法 普通加密方法是讲密码进行加密后保存到用户偏好设置中 钥匙串是以明文形式保存,但是不知道存放的具体位置 1.base64加密 base64 编码是现代密码学的基础 基本原理: ...

  9. JAVASCRIPT加密方法,JS加密解密综述(7种)

    一:最简单的加密解密 对于JAVASCRIPT函数escape()和unescape()想必是比较了解啦(很多网页加密在用它们),分别是编码和解码字符串,比如例子代码 用escape()函数加密后变为 ...

随机推荐

  1. Android Failed to find layer (XXX/XXX.xxActivity#0) in layer parent (no-parent).

    报错: Failed to find layer (XXX/XXX.xxActivity#0) in layer parent (no-parent). 解决: 将该xxActivity复制一份到桌面 ...

  2. java自动拆装箱

    介绍 Java 5增加了自动装箱与自动拆箱机制,方便基本类型与包装类型的相互转换操作.(关于基本类型与包装类型之前有记录过https://www.cnblogs.com/xiuzhublog/p/12 ...

  3. idea配置ssm框架

    详细教程如下:https://blog.csdn.net/GallenZhang/article/details/5193215 https://blog.csdn.net/qq_28008917/a ...

  4. Go语言 | CSP并发模型与Goroutine的基本使用

    今天是golang专题的第13篇文章,我们一起来聊聊golang当中的并发与Goroutine. 在之前的文章当中我们介绍完了golang当中常用的使用方法和规范,在接下来的文章当中和大家聊聊gola ...

  5. Istio 网络弹性 实践 之 故障注入 和 调用超时

    网络弹性介绍 网络弹性也称为运维弹性,是指网络在遇到灾难事件时快速恢复和继续运行的能力.灾难事件的范畴很广泛,比如长时间停电.网络设备故障.恶意入侵等. 超时时间 工作中常常会碰到这样的开发.测试场景 ...

  6. sge的简单的应用

    1.sge提交脚本qsub 1.qsub work.sh work.sh 不能以数字开头 2.qsub work.sh  默认工作路径为/home/username 3.qsub -cwd work. ...

  7. 操作系统-中断(2)IA-32/Linux的向量中断方式

    一.Intel定义下的异常和中断 不同体系和教材往往对异常和中断有不同的定义. Intel定义:中断是一种典型的由I/O设备触发的.与当前正在执行的指令无关的异步事件:而异常是处理器执行一条指令时,由 ...

  8. mysql中的函数总结

    mysql中常用日期时间函数 MySQL服务器中的三种时区设置: ①系统时区---保存在系统变量system_time_zone ②服务器时区---保存在全局系统变量global.time_zone ...

  9. TCP/IP网络编程之数据包协议

    一.概要 在了解了网络字节序之后,接下来就是要讲最最重点的消息协议.数据包是什么呢,数据包可以理解为两个人讲电话说的每一句话的内容.通过大家约定好的方式去理解.达到只有接听电话两个人才懂的东西.在程序 ...

  10. dump 内存分析

    CPU 及内存占用过大,这也是我们日常调试工作中最常见的两个问题 首先附上两链接 一个样例演示 http://www.cnblogs.com/xioxu/archive/2009/09/04/1560 ...