安全性算法

目录

一、安全性算法

二、基础术语

三、对称加密与非对称加密

四、数字签名

五、 哈希算法

六、哈希算法碰撞与溢出处理


 

一、安全性算法

安全性算法的必要性:

  安全性算法的必要性是因为在现代数字化社会中,我们经常需要传输、存储和处理敏感的数据,如个人隐私信息、金融数据、商业机密等。这些数据如果未经过适当的保护,可能会被恶意攻击者获取、篡改或滥用。

安全性算法遵循以下四个特性

  1. 保密性(Confidentiality):确保只有授权者才能访问和查看数据,对非授权人员保持数据保密。

  2. 完整性(Integrity):确保数据在传输和存储过程中没有被篡改、损坏或破坏,保持数据的完整性和一致性。

  3. 认证性(Authentication):确认数据的来源和真实性,确保数据发送者和接收者的身份是真实的,并且数据没有被冒充或伪造。

  4. 不可否认性(Non-Repudiation):确保数据的发送者不能否认他/她发送过的数据,防止他/她在后期否认该数据的发送或者执行。


二、基础术语

概念定义
明文未经过加密处理的原始数据或信息。
密钥用来进行加密和解密的一串字符或数字,只有持有相应密钥的人才能对加密数据进行解密。
密文加密明文后的数据或信息。
私钥用于非对称加密算法的一种密钥,只有私钥持有者才能进行解密。
公钥用于非对称加密算法的一种密钥,公钥可以公开给任何人使用,但只有私钥持有者才能进行解密。
加密函数一种算法,将明文和密钥作为输入,生成密文作为输出,实现对数据的保护。
解密函数一种算法,将密文和密钥作为输入,生成明文作为输出,实现对加密数据的还原。

三、对称加密与非对称加密

1.对称加密

        对称加密是一种加密技术,使用相同的密钥(也称为对称密钥)进行加密和解密。在对称加密算法中,发送方使用密钥将明文转换为密文,接收方使用相同的密钥将密文转换回明文。

        对称加密的优点是加密和解密速度快,适用于大量数据的加密和解密操作。常见的对称加密算法有DES(数据加密标准)、AES(高级加密标准)等。

优点: 加密和解密速度快,适用于大量数据的加密和解密操作。常见的对称加密算法有DES(数据加密标准)、AES(高级加密标准)等。然而,对称加密存在一个问题,即如何安全地共享密钥。如果密钥在传输过程中被攻击者获取,那么加密的安全性就会被破坏。因此,在某些情况下,非对称加密算法更常被用于密钥的安全交换。

2.非对称加密

        非对称加密是一种加密技术,与对称加密算法不同,它使用一对密钥进行加密和解密操作。这对密钥包括公钥(public key)和私钥(private key)。公钥可以公开给其他人使用,而私钥则只能由密钥的所有者保管,不公开给他人。

        在非对称加密中,发送方使用接收方的公钥来加密数据,而接收方则使用自己的私钥来解密。相反,如果发送方要发送加密的信息给接收方,发送方可以使用自己的私钥进行签名,接收方使用发送方的公钥验证签名的有效性。这种加密和解密操作过程使用不同的密钥,因此被称为“非对称”。

常用非对称加密RSA

优点: 可以实现加密和解密的分离,并且可以安全地共享公钥。即使公钥被其他人获取,也无法通过公钥推导出私钥。常见的非对称加密算法有RSA(由Rivest、Shamir和Adleman发明)和Elliptic Curve Cryptography(椭圆曲线加密)等。


四、数字签名

1.数字签名概念

        数字签名是一种用于验证数据完整性、身份认证和防止数据篡改的加密技术。它常用于确保发送方的身份,以及确保数据在传输过程中没有被篡改或伪造。

2.数字签名工作方式

        数字签名的工作方式是以公钥和哈希函数相互配合使用的,用户A先将明文的M以哈希函数计算出哈希值H,再用自己的私钥对哈希值H进行加密,加密后的内容和即为"数字签名"。最后将明文与数字签名一起发送给用户B。由于这个数字签名是由用户A的私钥进行加密的,且该私钥只有A才有,因此该数字签名可以代表A的身份。


五、 哈希算法

1.哈希算法是通过哈希函数计算一个键值对应的地址,进而建立哈希表,并依靠哈希函数查找各个键值存放在哈希表中的地址。查找速度与数据的多少无关,在没有碰撞和数据溢出的情况下即可查找成功,该方法还有保密性高的特点。

常见的哈希算法有除留余数法,平方取中法,折叠法和数字分析法

1.除留余数法

最简单的哈希函数是将数据除以一个某个常数后,取余数作为索引。

h(key) = key mod B

案例:在一个有13个位置的数组中,只是用7个地址,值分别是12,65,70,99,33,67,48。那么B就可以是13 。

案例代码:

public class javaDemo {public static void main(String[] args) {Map<Integer,Integer> map = new HashMap<>();int data[] = new int[]{12,65,70,99,33,67,48};//初始化哈希表for (int i=0;i<13;i++){map.put(i,null);}//除留余数for (int temp:data) {map.put((temp%13),temp);}System.out.println(map);
//注意:改代码只是展示除留余数法,碰撞问题将在后面进行修改}
}

注意:B虽然可以自己定义,但是尽量选择用质数(除了1和自身外没有其他正因数的数)

2.平方取中法

 平方取中法和除留余数法相当类似,就是先计算数据的平方,之后取中间的某段数字作为索引。

案例:
原始数据:12,65,70,99,33,67,51

平方后:144,4225,9801,1089,4489,2601

再通过取百位数或者十位数作为键值,取值后如下。

14,22,90,80,08,48,60

将上述7个数字对应原来的七个原始数据(12,65,70,99,33,67,51)

如果存放的空间为100地址空间

则正常进行数据映射如

f(14) = 12

f(22) = 65

.....

如果存放的空间为10地址空间,则需要对取值后的数进行压缩10倍,即14/10 = 1,22/10=2...

f(1) = 12

f(2) = 65

........

3.折叠法

        折叠法是将数据转换为一串数字后,先将这串数字拆成及部分,再把他们加起来,就可以计算出这个键值的桶地址(Bucket Address),例如,有一个数据转换成数字后为2365479125443.若以每四个数字为一个部分,则可以拆分成2365、4791、2544、3.将这4组数字加起来后即为索引值。

2365+4791+2544+3 = 9703 ->桶地址

        在折叠法中有两种做法。一种是向上例那样直接将每一部分相加所得的值作为其桶地址,这种做法成为“移动折叠法”。哈希法的设计原则之一是降低碰撞,如果希望降低碰撞,就可以将上述的数字中的技术为段或偶数位段反转后相加,以取得桶地址,这种改进后的做法成为“边界折叠法”

        还是以上面的数字为例,请看下列说明

情况一:将偶数位段反转

   2365(第一位的是奇数位,故不反转)

+1974(第二位的是偶数位,故要反转)

+ 2544(第三位的是奇数位,故不反转)

+ 3      (第四位的是偶数位,故要反转)

= 6886 ->桶地址

情况二:将奇数位段反转

   5632 (第一位的是奇数位,需要反转)

+ 4791(第二位的是偶数位,故不反转)

+ 4452(第三位的是奇数位,需要反转)

+ 3        (第四位的是偶数位,故不反转)

= 14878 -> 桶地址

4.数字分析法

数字分析法,通过分析数据,找取数据中数字重复率低的数字,将索引空间放在数据中重复率最低的位置,以此作为数据的索引。


六、哈希算法碰撞与溢出处理

碰撞与溢出

        哈希算法将输入数据映射到固定长度的哈希值。碰撞是指不同的输入数据最终得到相同的哈希值,而溢出则是指较大的输入数据映射到较小的输出空间中。这些问题的出现是由于哈希算法必须处理无限输入空间映射到有限输出空间的情况导致的。虽然设计者会尽力减少碰撞和溢出的概率,但在某些情况下仍无法完全避免。

1.线性探测法

线性探测算法:

public class javaDemo {public static void main(String[] args) {//假设地址空间为10,并且初始值为-1int index[] = new int[10];int num;int temp = num % index.length;while (true){
//            如果目标位置不存在数字则存入数据if (index[temp] == -1){index[temp] = num;break;}else {temp = (num+1) % index.length;}}}
}

 


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

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

相关文章

运营人必备这个微信运营工具

微信管理系统CRM在各行各业都有应用的场景---IT互联网、制造业、商业服务、金融投资、教育培训、房产家装、电商、政务等20行业领域均得到广泛应用。 微信CRM管理系统的主要功能&#xff1a; 多个微信号聚合聊天&#xff1a;解决多个微信来回切换&#xff0c;换着手着手机的麻烦…

【C++】位图

位图 1. 位图1.1 位图的概念1.1 位图的实现1.3 位图的应用 2. 布隆过滤器2.1 概念2.2 模拟实现2.3 优点和缺点2.4 应用场景2.5 哈希切分的应用 1. 位图 1.1 位图的概念 位图&#xff0c;就是用二进制位来表示数据的某种状态&#xff0c;例如判断数据是否存在&#xff0c;二进…

教你拥有一个自己的QQ机器人!0基础超详细保姆级教学!基于NoneBot2 Windows端搭建QQ机器人

0.序言 原文链接&#xff1a;教你本地化部署一个QQ机器人本教程主要面向Windows系统用户教程从0开始全程详细指导&#xff0c;0基础萌新请放心食用&#x1f355;如果你遇到了问题&#xff0c;请仔细检查是否哪一步有遗漏。如果你确定自己的操作没问题&#xff0c;可以到原文链…

信看课堂-厘米GNSS定位

我们常常说GPS 定位&#xff0c;不过定位远不止GPS定位&#xff0c;通过本节课程&#xff0c;我们将会了解到&#xff0c;原来GPS只是定位的一种&#xff1a; GNSS概述 不同的GNSS系统使用不同的频段来传输导航信号。以下是一些主要的GNSS系统及其相应的频段&#xff0c;用表…

苹果系统_安装matplotlib__pygame,以pycharm导入模块

为了更便捷、连贯的进行python编程学习&#xff0c;尽量在开始安装python软件时&#xff0c;将编辑器、模块一并安装好&#xff0c;这样能避免以后版本冲突的问题。小白在开始安装pycharm、pip、matplotlib往往会遇到一些问题&#xff0c;文中列示其中部分bug&#xff0c;供大家…

1200*C. Challenging Cliffs(模拟构造贪心)

Problem - 1537C - Codeforces Challenging Cliffs - 洛谷 解析&#xff1a; 排序数组&#xff0c;然后找出间隔最短的两个相邻的数 a&#xff0c;b&#xff0c;c&#xff0c;d&#xff0c;e&#xff0c;f &#xff08;假设b&#xff0c;c为差最小的两个数&#xff09;。 然后…

Python无废话-办公自动化Excel格式美化

设置字体 在使用openpyxl 处理excel 设置格式&#xff0c;需要导入Font类&#xff0c;设置Font初始化参数&#xff0c;常见参数如下&#xff1a; 关键字参数 数据类型 描述 name 字符串 字体名称&#xff0c;如Calibri或Times New Roman size 整型 大小点数 bold …

【一、灵犀考试系统项目设计、框架搭建】

一、创建数据库 1、打开power designer&#xff0c;新建数据库模型 2、新建数据表&#xff0c;以及关系 【注意】 图片的类型有两种&#xff1a;varbinary 和 image varbinary : 二进制字节流&#xff0c;可以自动控制长度 image : 最大可放2G图片 3、创建数据库&#…

创新家庭办公室:打造完美工作空间的秘诀

一个精心策划的家庭办公室有很多好处&#xff0c;何不把临时工作区升级改造为你的专属工作区呢&#xff0c;还能为这些至关重要的区域注入新的活力。 创造多用途的起居室&#xff1a;我们大多数人都不曾拥有一个可以完全根据工作需求设计的独立家庭办公室——所以有时候要找到…

QT:鼠标画线(双画布)

widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPoint> //点 #include <QMouseEvent> //鼠标事件 #include <QPaintEvent> //绘图事件class Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent 0);~Wi…

【算法训练-贪心算法 一】买卖股票的最佳时机II

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【贪心算法】&#xff0c;使用【数组】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&…

docker系列6:docker安装redis

传送门 docker系列1&#xff1a;docker安装 docker系列2&#xff1a;阿里云镜像加速器 docker系列3&#xff1a;docker镜像基本命令 docker系列4&#xff1a;docker容器基本命令 docker系列5&#xff1a;docker安装nginx Docker安装redis 通过前面4节&#xff0c;对docke…

C#中的数组探究与学习

目录 C#中的数组一般分为:一.数组定义:为什么要使用数组?什么是数组?C#一维数组for和foreach的区别C#多维数组C#锯齿数组初始化的意义:适用场景:C#中的数组一般分为: ​①.一维数组。 ②.多维数组,也叫矩形数组。 ③.锯齿数组,也叫交错数组。 一.数组定义: 数组…

Halcon 从基础到精通-02- 开发基于HALCON的应用

HALCON的应用通过HDevelop应用来构建原型。HDevelop的开发主要有3种形式。 Start from Scratch: 手动通过脚本&#xff0c;把HDevelop的代码转化为一般的编程语言。如&#xff0c;上一节提到&#xff0c;其实&#xff0c;每个operators,也许并不一样&#xff0c;需要依据HALC…

云安全之等级保护解决方案及应用场景

等保2.0解决方案背景 适应云计算、移动互联网、大数据、物联网和工业控制等新技术发展&#xff0c;在新的技术场景能够顺利开展等级保护工作;《网络安全法》2016年已正式发布&#xff0c;等级保护2.0为了更好配合《网络安全法》的实施&#xff1b;等级保护1.0&#xff0c;在适…

(32)测距仪(声纳、激光雷达、深度摄影机)

文章目录 前言 32.1 单向测距仪 32.2 全向性近距离测距仪 32.3 基于视觉的传感器 前言 旋翼飞机/固定翼/无人车支持多种不同的测距仪&#xff0c;包括激光雷达&#xff08;使用激光或红外线光束进行距离测量&#xff09;、360 度激光雷达&#xff08;可探测多个方向的障碍…

SpringBoot自带模板引擎Thymeleaf使用详解①

目录 前言 一、SpringBoot静态资源相关目录 二、变量输出 2.1 在templates目录下创建视图index.html 2.2 创建对应的Controller 2.3 在视图展示model中的值 三、操作字符串和时间 3.1 操作字符串 3.2 操作时间 前言 Thymeleaf是一款用于渲染XML/HTML5内容的模板引擎&am…

【初识Linux】Linux环境配置、Linux的基本指令 一

Linux基本指令一 一、学习前提(环境配置&#xff09;①安装Xshell和云服务器推荐②Xshell用途如下图③打开Xshell 二、 Linux基本指令①whoami和who指令②pwd、ls、ls -l三个指令ls指令扩充 ③cd指令前提了解有了上面的认识&#xff0c;我们就可以开始cd指令的学习了 ④tree指令…

【JavaEE】JUC(Java.util.concurrent)常见类

文章目录 前言ReentrantLock原子类线程池信号量CountDownLatch相关面试题 前言 经过前面文章的学习我们大致了解了如何实现多线程编程和解决多线程编程中遇到的线程不安全问题&#xff0c;java.util.concurrent 是我们多线程编程的一个常用包&#xff0c;那么今天我将为大家分…

ES 关于 remote_cluster 的一记小坑

最近有小伙伴找到我们说 Kibana 上添加不了 Remote Cluster&#xff0c;填完信息点 Save 直接跳回原界面了。具体页面&#xff0c;就和没添加前一样。 我们和小伙伴虽然隔着网线但还是进行了深入、详细的交流&#xff0c;梳理出来了如下信息&#xff1a; 两个集群&#xff1a;…