安全性算法

news2024/11/16 3:12:53

目录

一、安全性算法

二、基础术语

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

四、数字签名

五、 哈希算法

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


 

一、安全性算法

安全性算法的必要性:

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

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

  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,并且初始值为-1
        int 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.coloradmin.cn/o/1063772.html

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

相关文章

Linuxzhi6通过源代码编译安装软件

目录 一、使用源代码安装软件的优点 二、编译需求 三、安装 一、使用源代码安装软件的优点 由于自由软件的最新版本大都以源码的形式最先发布&#xff0c;编译安装可以获得软件的最新版本&#xff0c;及时修 复bug 如果当前安装的程序无法满足需求&#xff0c;用户可以根据…

合宙Air780e+luatos+腾讯云物联网平台完成设备通信与控制(属性上报+4G远程点灯)

1.腾讯云物联网平台 首先需要在腾讯云物联网平台创建产品、创建设备、定义设备属性和行为&#xff0c;例如&#xff1a; &#xff08;1&#xff09;创建产品 &#xff08;2&#xff09;定义设备属性和行为 &#xff08;3&#xff09;创建设备 &#xff08;4&#xff09;准备参…

Python小技巧:快速合并字典dict()

文章目录 前言知识点字典合并1. dict.update()基础合并2. 字典推导式 update() 后话 前言 这里是Python小技巧的系列文章。这是第四篇&#xff0c;快速合并字典。 在Python的使用中&#xff0c;有时候需要将两个 dict(字典) 进行合并。 通常我们会借助 dict(字典) 的内置方法 …

【C语言】编译和链接

前言&#xff1a; 编译和链接是计算机程序开发中的两个重要步骤&#xff0c;用于将源代码转化为可执行的程序。 文章目录 一、翻译环境和运行环境二、翻译环境中的编译2.1 预处理&#xff08;预编译&#xff09;2.2 编译2.2.1 语法分析2.2.2 语法分析2.2.3 语义分析 2.3 汇编 三…

【Audio】正弦波生成原理及C++代码

正弦波生成及频谱分析 正弦波公式 诊断系统&#xff08;Diag&#xff09;会通过播放一段指定频率、采样率、时长及振幅的正弦音&#xff0c;以此对Audio测试。正弦波的公式如下&#xff0c;其中 A是振幅、x是时间、F是频率。 y A ∗ sin ⁡ ( 2 ∗ π ∗ x ∗ F ) y A* \s…

【考研数学】高等数学第七模块 —— 曲线积分与曲面积分 | 4. 对坐标的曲面积分(第二类曲面积分)与场论初步

文章目录 二、曲面积分2.2 对坐标的曲面积分&#xff08;第二类曲面积分&#xff09;1. 问题产生 —— 流量2. 对坐标的曲面积分的定义&#xff08;了解&#xff09;3. 对坐标的曲面积分的性质4. 对坐标的曲面积分的计算法&#xff08;1&#xff09; 二重积分法&#xff08;2&a…

properties文件和yaml文件的区别~

之前&#xff0c;关于数据库的连接信息&#xff0c;端口号的设置等&#xff0c;我们会将它分门别类的写在多个文件中&#xff0c;但SpringBoot&#xff0c;它讲究统一的配置管理&#xff0c;我们想设置的任何参数都集中在一个固定位置和命名的配置文件&#xff0c;而该配置文件…

10.4| QT实现TCP服务器客户端搭建的代码,现象

头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget>#include<QTcpServer> //服务器头文件 #include<QTcpSocket> //客户端头文件#include<QList> //链表容器 #include<QMessageBox> …

Error string: Could not load library

启动Rivz时&#xff0c;报错&#xff1a; Error string: Could not load library (Poco exception libg2o_csparse_extension.so.0.1: cannot open shared object file: No such file or directory) [ERROR] [1696572310.529059051]: Failed to load nodelet [/radar_graph_s…

破译滑块验证间距 破译sf顺丰滑块验证

废话不多说直接开干&#xff01; from selenium import webdriver # 导入配置 from selenium.webdriver.chrome.options import Options import time from PIL import Image # 导入动作链 from selenium.webdriver.common.action_chains import ActionChains import random, st…

如何获取高质量的微信私域客户?

在当今数字化时代&#xff0c;企业都在努力寻求创新的营销方式来获取更多的客户。微信私域流量作为一种精准的营销工具&#xff0c;越来越受到企业的青睐。那么&#xff0c;如何获取高质量的微信私域客户呢&#xff1f;本文将为你揭示这一难题的答案&#xff0c;让你轻松Get高转…

STM32--MQ2烟雾传感器

本文主要介绍STM32F103C8T6和烟雾传感器模块的控制算法 简介 烟雾模块选用MQ-2气体传感器&#xff0c;根据传感器的电导率随空气中可燃气体浓度的增加而增大的特性检测空气中可燃气体&#xff0c;然后将电导率的变化转换成对应的电信号 MQ系列烟雾传感分类如下&#xff1a; 该…

基于SSM的校园二手物品交易平台设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

Python之字符串构造

Python之字符串构造 字符串str 一个个字符组成的有序的序列&#xff0c;是字符的集合使用单引号、双引号、三引号引住的字符序列字符串是不可变对象&#xff0c;是字面常量 Python3起&#xff0c;字符串都是Unicode类型 x abcde使用for循环遍历x的值&#xff0c;打印并查看…

九小场所消防安全检查安全码系统

九小场所安全码&#xff0c;实现消防安全监督管理&#xff0c;落实消防安全责任&#xff0c;形成九小场所网格化监控、动态化管理&#xff1b; 安全码流程化管理 监管部门日常检查&#xff0c;微信扫码即可填写检查记录&#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;。 然后…

虫情测报灯如何实现自动化测报?

一、KH-CQPest虫情测报灯的工作过程 虫情测报灯是新一代的图像式虫情测报智能设备&#xff0c;在农业虫害防治领域拥有独特魅力&#xff0c;它内置高像素的摄像头&#xff0c;能够精准记录并将照片上传至智慧农业平台识别害虫的形态、种类。虫情测报灯运用现代光电数控集成技术…

【深蓝学院】手写VIO第2章--IMU传感器--作业

这次作业坑很多&#xff0c;作业说明的不清楚&#xff0c;摸索了很长时间才将此次作业完成&#xff0c;在这里进行记录。 1. T1 1.1 题干 1.2 解答 1.2.1 法1&#xff0c;ros related方法 不知道为什么我的launch不了&#xff0c;在imu_utils目录下面建立build后&#xff0…

剑指offer——JZ7 重建二叉树 解题思路与具体代码【C++】

一、题目描述与要求 重建二叉树_牛客题霸_牛客网 (nowcoder.com) 题目描述 给定节点数为 n 的二叉树的前序遍历和中序遍历结果&#xff0c;请重建出该二叉树并返回它的头结点。 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}&#xff0c;则重建出…

[Spring] @Bean 修饰方法时如何注入参数

目录 一、Bean 的简单使用 1、正常情况 2、问题提出 二、解决方案 1、Qualifier 2、直接写方法名 三、特殊情况 1、DataSource 一、Bean 的简单使用 在开发中&#xff0c;基于 XML 文件配置 Bean 对象的做法非常繁琐且不好维护&#xff0c;因此绝大部分情况下都是使用…