从个人角度看什么是加密算法

news2024/11/16 17:32:25

什么是加密?从程序的角度看,加密就是一个函数,它接收明文P和密钥K作为参数,传入加密函数运算后,得到的返回值,称之为密文C

C = encrypt(P, K);

而解密,就是对加密的逆操作。把密文C和密钥K作为参数传入解密函数中,运算后得到的返回值,就是明文P

P = decrypt(C, K);

加解密流程如下图:

加解密流程

从上面可以看出,只有保存密钥的接收方,才能对密文进行解密,得到发送方发送的明文。密文即使在网络传输过程中被人恶意拦截,由于缺少密钥,也是无法解密得到明文数据的。通过对受保护的数据,引入密钥作为X因子,使用某种计算方法,得到的完全不同于明文的密文数据,这样的方式称为数据加密。解密就是加密的逆运算!

如果上面加解密流程图中,加密和解密使用的密钥相同,则称这种加密方式为对称加密。如果密钥不同,则称之为非对称加密。非对称加密的安全性更高,能够防止发送方密钥泄露、或者多次拦截密文破解出密钥,造成受保护数据被破解(密文被解密)

那么什么是加密算法呢?

本质上加密算法是对明文P和密钥K进行一系列运算,除了一些知名的加密算法外,自己也可以DIY制作一个私人的加密算法,比如:

C = P * 3 + K;

假设明文是一个数字,可以让其乘以3,然后再加上密钥K的值,得到的一个新值,就是密文C。那么解密算法就是加密算法的逆运算:

P = (C - K) / 3;

可以看出:加密函数和解密函数并不是完全不同的两种运算方法,解密函数本质上是加密函数的逆运算。这就是为什么当我们在说加密算法时,并不会加密算法对应的解密算法是什么,因为确定了加密算法,解密算法也就确定了(加密算法的逆运算)。但是,并不是所有的加密算法都可逆的,比如说MD5算法就是单向不可逆的

有人可能会有疑问:如果加密算法不可逆,那么接收方收到密文要怎么解密,进而获得明文呢?

如果发送方的目的是为了把明文安全无泄露地发送给接收方,防止有人恶意拦截破解里面的内容,那么你的加密算法必须是可逆的。但是,如果发送方并不在乎明文是不是被除了接收方的其他人知道,它想要的是接收方接收到完整的明文,没有删除,没有丢失,没有篡改,那么加密算法可以是单向不可逆的。明文和密钥加密后得到的密文,作为一个认证码,和明文一起发送给接收方。接收方收到后用接收到的明文,和自己的密钥一起,用同样的加密算法运算后,得到的密文,和接收到的认证码进行比较,相等即说明明文无误,接收并处理。如果不相等,就说明明文被篡改了,直接丢弃!

数据认证码的流程如下图:

认证码流程

总结:

  1. 加密的几个必要条件:明文、密钥、加密算法。结果是得到一个密文
  2. 解密是加密的逆运算:密文、密钥、加密算法。结果是还原出加密的数据(明文)
  3. 如果加解密的密钥相同,我们称这个加解密过程为对称加密;如果密钥不同,我们称这个加解密过程为非对称加密
  4. 解密算法是加密算法的逆运算,而不是一个完全不同的算法,所以我们一般说加密算法,其实就包含了解密的过程
  5. 加密算法也有可逆和不可逆之分。如果加密算法可逆,就说明有解密函数,那么就可以根据密文和密钥解密出原来的明文,这种加密方式用于数据保密,防止除接收方外的其他接收者获取明文内容。如果加密算法不可逆,就说明没有解密函数,那么接收方即使有密文和密钥,也无法解密出明文,此时发送方必须把明文和密文(密文被当做认证码)发送给接收方,接收方用明文和自己的密钥用同样的加密算法计算得到自己的密文(认证码),和接收到的密文比较,相等即说明明文内容正确,此时才会接收并处理明文数据,这种加密方式用于接收方确保发送方的明文数据正确无篡改。当然可逆的加密算法也可以用来生成认证码!

最后有必要讨论加密算法需不需要只让发送方和接收方知道,如果被其他人知道加密算法,会不会导致数据被破解呢?

理论上当然只有发送方和接收方知道最好,这样最安全,但是全世界有这么多的终端设备或应用都需要对数据进行加密运算,你很难编写那么多的加密算法。且这么多的终端和软件,很难让自己的算法不被其他人知晓。所以现在大家在做数据加密时普遍使用久经考验的算法,比如AES加密算法,AES算法是目前应用最广泛的加密算法。只要你的算法设计的足够复杂,再加上X因子密钥的参与,就可以保证数据的高安全性!

随着算力和技术的不断进步,以前安全的加密算法会越来越不安全,就需要设计更复杂更难破解的加密算法。所以,需要用发展的眼光看待加密算法!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/442554.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

102. 二叉树的层序遍历【206】

难度等级:中等 上一篇算法: 215. 数组中的第K个最大元素【382】 力扣此题地址: 102. 二叉树的层序遍历 - 力扣(Leetcode) 1.题目:102. 二叉树的层序遍历 给你二叉树的根节点 root ,返回其节点值…

构建清晰、高效的Android应用程序:了解Android架构组件

概述 Android 架构组件是一个由 Google 推出的集成库,旨在使 Android 应用开发更加快捷、高效和易于维护。Android 架构组件提供了一套可扩展的 API,帮助开发者在编写 Android 应用时,更好地组织应用的代码,并提供了一些通用的、…

C++ | 一些你所忽略的类和对象小知识

文章目录 一、再谈构造函数1、初始化列表引入初始化的概念区分语法格式及使用注意事项 2、explict关键字单参构造函数多参构造函数 二、static成员1、面试题引入2、static特性细述3、疑难解惑4、在线OJ实训5、有关static修饰变量的一些注意要点 三、匿名对象四、友元1、友元函数…

iPhone照片太多,如何快速搜索照片?

当你在iPhone中存储了大量照片,如何快速找到其中的某一张照片?通过“照片”应用,你可以轻松查找特定人物、地点、事物或事件的照片。 通过标签查看: 轻点照片应用右下角的“搜索”,iOS 系统会自动将照片分类显示。 时…

java944医院医疗物资管理系统

本系统以医院业务流程为基础,结合考虑医疗物资的特点,主要包含物流信息管理系统中的后勤物资仓库管理、供应消毒物资管理、科室申请领用管理以及查询决策系统等功能。 目 录 1 1课题背景 2 2整体设计 2 2.1 设计目标 2 2.2 系统架构 3…

xorm实战——结构体映射到实现数据库操作(包含导出数据库脚本)

下载引入框架 go语言中要使用orm框架需要先下载框架,并引入: // 安装工具包 go get xorm.io/xorm//安装数据库驱动(这里是mysql)go get -u github.com/go-sql-driver/mysql//引入框架import ("gorm.io/driver/mysql"&…

4月26日,每日互动(个推)与您相约第六届数字中国建设峰会

4月26日-30日,第六届数字中国建设峰会及成果展览会将在福州隆重举行。本届峰会以“加快数字中国建设,推进中国式现代化”为主题,由国家网信办、国家发改委、科技部、工信部、国务院国资委、福建省人民政府共同主办,福州市人民政府…

嵌入式Linux(4):应用层和内核层数据传输

文章目录 简介1、如果在应用层使用系统IO对设备节点进行打开,关闭,读写等操作会发生什么呢?写个例子2、假如驱动层的file_operations里面没有实现read之类的操作函数,会发生什么?3、应用层和内核层室不能直接进行数据传…

Go语言面试题--基础语法(27)

文章目录 1.下面这段代码输出什么?2.下面这段代码输出什么?3.下面这段代码输出什么? 1.下面这段代码输出什么? func main() {var a [5]int{1, 2, 3, 4, 5}var r [5]intfor i, v : range a {if i 0 {a[1] 12a[2] 13}r[i] v}f…

ROS学习第五节——话题通信之发布

首先补充一个命令ROS计算图 rosrun rqt_graph rqt_graph 1.原理讲解 话题通信实现模型是比较复杂的,该模型如下图所示,该模型中涉及到三个角色: ROS Master (管理者)Talker (发布者)Listener (订阅者) ROS Master 负责保管 Talker 和 Listener 注册的信息&…

数字孪生(1)

目前接触的客户群体是做大屏展示,闲鱼上5元包邮的那种科技感前端(不好意思我买了)各路模型大整合 实景GISiOT,如果再来点动画就好,然满屏动起来,火灾烧起来,水面荡漾起来,工程车开起…

关于GeoServer发布的wfs服务的精度问题

本周基于arcgis/core组件,利用arcgis api for js 4.22版本加载GeoServer发布的同一数据源的wms和wfs服务,出现了偏移的问题。 分析:同一数据源不同的访问方式,出现了偏移,这是很严重的问题。初步判断为js api加载方式的…

2023年4月北京/江苏/深圳CDGA/CDGP数据治理专家认证考试报名

DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业…

【社区图书馆】Go语言程序设计感想

随着 Go 语言的越来越流行,越来越多的人对其设计和语法进行了评价。以下是一些关于 Go 技术的感想: Go语言的特色: 没有继承多态的面向对象强一致类型interface不需要显式声明(Duck Typing)没有异常处理(Error is value)基于首字母的可访问…

大学计划《数字化转型赋能教育创新发展高峰论坛》成功举办

2023年4月8日,由航天科技控股集团股份有限公司(简称“航天科技”)主办,CFF上海与上海电子信息职业技术学院承办、智慧树网支持的《数字化转型赋能教育创新发展高峰论坛》线上会议顺利召开。此次会议邀请到了众多教育界专家、教学名…

Linux 文件描述符

Linux 文件描述符 Linux 中一切皆文件,比如 C 源文件、视频文件、Shell脚本、可执行文件等,就连键盘、显示器、鼠标等硬件设备也都是文件。 一个 Linux 进程可以打开成百上千个文件,为了表示和区分已经打开的文件,Linux 会给每个…

基于AT89C51单片机的电子万年历系统

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87708258 源码获取 主要内容: 电子万年历系统以实时时钟芯片DS1302和AT89C52单片机为主要研究对象,着重进行51单片机控制系统的设计研究和如…

天梯赛 L3-025 那就别担心了

原题链接: PTA | 程序设计类实验辅助教学平台 题目描述: 下图转自“英式没品笑话百科”的新浪微博 —— 所以无论有没有遇到难题,其实都不用担心。 博主将这种逻辑推演称为“逻辑自洽”,即从某个命题出发的所有推理路径都会将结…

DHCP的原理和配置

DHCP在一个广播域里动态修改IP地址 背景 DHCP (Dynamic Host Configuration Protocol,动态主机配置协议)由Internet工作任务小组设计开发专门用于为TCP/IP网络中的计算机自动分配TCP/IP参数的协议 使用DHCP的好处 减少管理员的工作量避免输入错误的可能避免IP地…

Java每日一练(20230421)

目录 1. 整数排列 🌟 2. 数组排序 🌟 3. 单词搜索 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 整数排列 十位数的所有排列…