常用图像加密技术-流密码异或加密

2024-04-28 12:52

本文主要是介绍常用图像加密技术-流密码异或加密,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

异或加密是最常用的一种加密方式,广泛的适用于图像处理领域。这种加密方式依据加密密钥生成伪随机序列与图像的像素值进行异或操作,使得原像素值发生变化,进而使得图像内容发生变化,达到保护图像内容的目的。

该加密方法是以图像的像素为基本操作单位,改变像素值,改变图像像素间的相关性,但是像素的位置没发生变化。异或加密是最常用的一种加密方式,广泛的适用于图像处理领域。这种加密方式依据加密密钥生成伪随机序列与图像的像素值进行异或操作,使得原像素值发生变化,进而使得图像内容发生变化,达到保护图像内容的目的。该加密方法是以图像的像素为基本操作单位,改变像素值,改变图像像素间的相关性,但是像素的位置没发生变化。

设未压缩的原始灰度图像的像素值分布在0~255之间,也就是说该图像的每个像素值P(i,j)均可以用8位二进制来表示,其中(i,j)表示该像素在图像中的位置,如图像像素值为147,那么用二进制表示就是10010011,若该像素值的第k个比特位用P(i,j,k)表示,那么像素可以用以下公式表示:

P(i,j,k)=\left\lfloor \frac{P(i,j)}{​{​{2}^{k}}} \right\rfloor \bmod 2,\text{ k=0,1,}\cdot \cdot \cdot \text{7}      (1)

P(i,j)=\sum\limits_{k=0}^{7}{P(i,j,k)\times {​{2}^{k}}}                                (2)

根据加密密钥生成伪随机序列R(i,j,k)也是8位二进制,且生成的大小与图像大小一样,将其与像素值二进制P(i,j,k)根据公式3进行异或。

B(i,j,k)=P(i,j,k)\oplus R(i,j,k)        (3)

上式中P(i,j,k)表示图像的各平面二进制,R(i,j,k)是根据加密密钥生成的二进制,其大小与图像二进制相同,B(i,j,k)表示异或得到新的二进制序列,根据公式2将其转换成十进制,由此得到新的像素值,异或加密的效果如图所示。 

 由于密钥生成的序列是随机的,也就表示生成的序列是毫无规律的,那么与像素值异或得到新的像素值,也是毫无规律,异或加密后,不仅使得像素值发生变化,而且也打乱了像素间的相关性,使得其失去一般规律性,由此得到保护图像内容的安全,统计了图像加密前后的像素直方图分布,如下图所示。从中可以看出,原始图像的像素分布呈现一定的错落,而异或加密后,像素分布呈现出非常规律的均衡化,较平均的分布在[0,255],说明各像素异或后随机分布且像素值发生了变化,异或加密能有效的保护图像信息内容安全。

这篇关于常用图像加密技术-流密码异或加密的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/943307

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

019、JOptionPane类的常用静态方法详解

目录 JOptionPane类的常用静态方法详解 1. showInputDialog()方法 1.1基本用法 1.2带有默认值的输入框 1.3带有选项的输入对话框 1.4自定义图标的输入对话框 2. showConfirmDialog()方法 2.1基本用法 2.2自定义按钮和图标 2.3带有自定义组件的确认对话框 3. showMessageDialog()方法 3.1

工作常用指令与快捷键

Git提交代码 git fetch  git add .  git commit -m “desc”  git pull  git push Git查看当前分支 git symbolic-ref --short -q HEAD Git创建新的分支并切换 git checkout -b XXXXXXXXXXXXXX git push origin XXXXXXXXXXXXXX

java常用面试题-基础知识分享

什么是Java? Java是一种高级编程语言,旨在提供跨平台的解决方案。它是一种面向对象的语言,具有简单、结构化、可移植、可靠、安全等特点。 Java的主要特点是什么? Java的主要特点包括: 简单性:Java的语法相对简单,易于学习和使用。面向对象:Java是一种完全面向对象的语言,支持封装、继承和多态。跨平台性:Java的程序可以在不同的操作系统上运行,称为"Write once,