首页 > 其他分享 >HASH与对称加密详解

HASH与对称加密详解

时间:2023-12-13 16:25:25浏览次数:33  
标签:加密 OpenSSL 明文 详解 解密 HASH 数据

HASH概述

Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数 常见的哈希算法
  • -MD5
  • --SHA1/256/512
  • -- HMAC

Hash的特点

  • 算法是公开的
  • 对相同数据运算,得到的结果是一样的
  • 对不同数据运算,如MD5得到的结果默认是128位,32个字符(16进制标识)。
  • 没法逆运算
  • 信息摘要,信息“指纹”,是用来做数据识别的

HASH用途

  1. 密码加密

  • 可以使用RSA加密吗?

  不可以-有安全隐患
  • 比如如果客户端加密字符串-服务器解密-密码直接明文存储
  • 知己存储客户端加密后的字符串、私钥泄露
  • 两个原则:
  1. 网络上不允许明文传递用户隐私信息!
  2. 本地不允许明文保存用户隐私信息!【即使源码泄露也不能获取用户密码】
  • 直接使用MD5

  • 不安全可以反查 www.cmd5.com
  • MD5加盐

let salt = "@*&%rererwerrrtryrtrsdesdsd"
("123"+salt).md5
  • 不安全- 写死在程序中的一旦泄露就不安全了
  • HMAC加密方案

let salt = "@*&%rererwerrrtryrtrsdesdsd"
pwd.hmacMD5StringWithkey(salt);
  1. 使用一个密钥加密,并且做两次散列
  2. 在实际开发中,密钥来自于服务器(动态的)
  3. 一个账号,对应一个KEY,而且还可以更新 [比如登录的时候]
  • 上面这种方式还能优化吗 有什么安全隐患?
  • 黑客网络劫持 直接获取到了密码e10adc3949ba59abbe56e057f20f883e
  • 拿到这个密码直接做登录操作
  • 优化方案
(pwd.+"当前时间").md5
时间:服务器时间 -- 202312081010
1.((HMAC哈希值)+201811022037).md5
2.(HMAC哈希值)+201811022031
如果对比不上、服务器需要上移一分钟继续做对比

  2.搜索引擎

  拆词搜索
"海创" "四川" "iOS"
  • 把拆分的词语hash一下得到128位的二进制
  • 核心算法:然后把hash值按位相加,然后就能找到相应hash值的内容

  版权

  • 视频平台会在文件在第一次上传的时候会保存当前文件的hash值-然后对视频进行处理
  • 以后下载的都不是原文件了,再次上传hash值对不上 -- 盗版的
  • 百度云-腾讯云上传文件的时候---如果hash值对上加上其他算法--判断一致了-秒传

  数字签名

为什么用签名这个词.因为老外喜欢用支票,支票上面的签名能够证明这东西是你的.那么数字签名顾名思义,就是用于鉴别数字信息的方法 接下来我们思考一下.想要证明数字信息(也就是二进制数据,计算机里面的任意数据)的有效性,那么使用什么方式最合适呢? 我们可以想到有"信息指纹"之称的HASH算法,在之前也讲到HASH算法专门用来做文件数据的识别.那么在网络数据传递的过程中,我们可以将明文数据,和数据的HASH值一起传递给对方.对方可以拿出HASH值来进行验证. 但是在这个过程中,如何做到数据的保护呢?明文数据和HASH值如果直接传递就有都被篡改的风险.所以这里我们要对数据进行加密.明文数据有时会比较大,不适合使用RSA非对称加密算法,那么数据的HASH值是比较小的.这个数据是用于校验的,它完全可以使用RSA来加密.所以在数据传递的时候,我们将明文数据加上通过RSA加密的校验数据一并传递给对方.那么这个通过RSA加密的校验数据,我们称之为签名.

数字签名的验证过程

当对方拿到数据之后,如何进行验证呢?
  • 首先传递数据时会将原始的数据和数字签名一起发送
  • 对方拿到数据后,先进行校验.拿到原始数据,通过同样的HASH算法得到数据的HASH值.
  • 然后通过非对称加密,将数字签名中的校验HASH值解密出来.
  • 最后对比两个HASH值是否一致.这样可以很好的判断数据是否被篡改!

对称加密

对称加密方式:明文通过密钥加密得到密文。密文通过密钥解密得到明文

常见算法

  • DES 数据加密标准(用得少,因为强度不够)
  • 3DES 使用3个密钥,对相同的数据执行3次加密,强度增强
  • AES 高级密码标准。《比如苹果的钥匙串访问》、FBI

应用模式

  1. ECB(Electronic Code Book):电子密码本模式。每一块数据,独立加密。
  • 最基本的加密模式,也就是通常理解的加密,相同的明文将永远加密成相同的密文,无初始向量,容易受到密码本重放攻击,一般情况下很少用。
  1. CBC(Cipher Block Chaining):密码分组链接模式。使用一个密钥和一个初始化向量[IV]对数据执行加密。
  • 明文被加密前要与前面的密文进行异或运算后再加密,因此只要选择不同的初始向量,相同的密文加密后会形成不同的密文,这是目前应用最广泛的模式。CBC加密后的密文是上下文相关的,但明文的错误不会传递到后续分组,但如果一个分组丢失,后面的分组将全部作废(同步错误)。
  • CBC可以有效的保证密文的完整性,如果一个数据块在传递时丢失或改变,后面的数据将无法正常解密。

终端演示

OpenSSL

当涉及OpenSSL时,它是一个开源的软件库,主要用于提供加密和安全功能。以下是一些关键的功能和用途:
  1. 加密和解密操作: OpenSSL支持各种加密算法,包括对称加密(如AES、DES、3DES等)和非对称加密(如RSA、DSA、ECC等)。这允许开发人员对数据进行加密以确保隐私和安全,同时能够进行解密以访问原始数据。
  2. 数字证书管理: OpenSSL支持证书的创建、签名、验证以及管理。它能够处理X.509证书,用于安全地验证通信方的身份,确保数据传输的完整性和可信度。
  3. 安全套接层(SSL)和传输层安全(TLS)支持: OpenSSL提供了实现SSL和TLS协议的功能,允许安全地在网络上进行通信,保护数据免受窃听和篡改。
  4. 安全哈希函数: 它支持多种安全哈希算法,如MD5、SHA-1、SHA-256等,用于生成数据的哈希值,通常用于验证数据完整性或创建数字签名。
  5. 密码学函数和工具: OpenSSL提供了丰富的密码学函数和工具,可以用于密钥生成、随机数生成、消息认证码(MAC)计算等。
  6. 跨平台性: OpenSSL是跨平台的,可以在多种操作系统上使用,包括Linux、Windows、macOS等,也可以与多种编程语言进行集成,如C、C++、Python等。
由于其功能强大且灵活性高,OpenSSL被广泛应用于许多网络应用程序和系统中,用于加密通信、保护数据、身份验证以及确保网络安全。
加密
AES(ECB)加密“hello”字符串
$ echo -n hello | openssl enc -aes-128-ecb -K 616263 -nosalt | base64
AES(CBC)加密“hello”字符串
$ echo -n hello | openssl enc -aes-128-cbc -iv 0102030405060708 -K 616263 -nosalt | base64\
解密:
AES(ECB)解密
$ echo -n d1QG4T2tivoi0Kiu3NEmZQ== | base64 -D | openssl enc -aes-128-ecb -K 616263 -nosalt –d
AES(CBC)解密
$ echo -n u3W/N816uzFpcg6pZ+kbdg== | base64 -D | openssl enc -aes-128-cbc -iv 0102030405060708 -K 616263 -nosalt –d
 ecb 加密text.txt 修改一个字符后继续加密 cbc 加密text.txt 修改一个字符后继续加密

 

标签:加密,OpenSSL,明文,详解,解密,HASH,数据
From: https://www.cnblogs.com/ZhangShengjie/p/17899294.html

相关文章

  • Linux下PCI设备驱动开发详解(二)
    Linux下PCI设备驱动开发详解(二)根据上一章的概念,PCI驱动包括PCI通用的驱动,以及根据实际需要设备本身的驱动。所谓的编写设备驱动,其实就是编写设备本身驱动,因为linux内核的PCI驱动是内核自带的。为了更好的学习PCI设备驱动,我们需要明白内核具体做了什么,下面我们研究一下,linuxPCI......
  • 数据入表 | 详解数据资产会计核算与企业应对
    从2015年《促进大数据发展行动纲要》到2022年《数据20条》到2023年8月份出台了《企业数据资源相关会计处理暂行规定》,可见国家层面对数据的重视和探索如何进一步挖掘数据价值,发挥数据的应用潜力。一石激起千层浪,面对如此重要的规定,企业又该如何应对呢?且听小亿一一道来。一、出台背......
  • pod控制器详解
    这一章节是讲解pod的编排和调度,就得用到诸多的控制器。kubectlapi-resources#查看k8s的资源有哪些1.控制器作用1.pod类型的资源,如果直接删除,不会重建2.控制器可以帮助用户监视、并且保证相应的节点上始终运行着用户定义好的pod副本数在运行。3.甚至pod超过、或者......
  • pod详解
    Pod是什么Pod是Kubernetes创建或部署的最小单位。一个Pod封装一个或多个容器(container)、存储资源(volume)、一个独立的网络IP以及管理控制容器运行方式的策略选项。Pod使用主要分为两种方式:Pod中运行一个容器。这是Kubernetes最常见的用法,您可以将Pod视为单个封装的容器,但是Kube......
  • 【教程】浅谈ios混淆和加固加密
    ​混淆:针对项目代码,代码混淆通常将代码中的各种元素(变量、函数、类名等)改为无意义的名字,使得阅读的人无法通过名称猜测其用途,增大反编译者的理解难度。虽然代码混淆可以提高反编译的门槛,但是对开发者本身也增大了调试除错的难度。开发人员通常需要保留原始未混淆代码用于调试。......
  • 【交叉链表】Java哈希表——HashSet类/双指针
    leetcode160.相交链表题意:给定两个链表A、B的表头节点,找到链表交叉节点(地址值相同)。链表A长度为m,链表B长度为n,范围在[1,3e4]题解1:根据哈希表去重的原理,使用哈希表集合HashSet来维护链表节点,默认比较节点地址值。将链表A中的节点全部add进HashSet中,然后遍历链表B中的节点,如果......
  • Python——第五章:hashlib模块
    hashlib模块hashlib模块是Python中用于加密散列(hash)算法的模块。它提供了对常见的哈希算法(如MD5、SHA-1、SHA-256等)的支持,使得开发者可以轻松地在其应用中进行数据的安全散列。以下是hashlib模块中一些常用的哈希算法:MD5(MessageDigestAlgorithm5):产生128位的哈......
  • 【教程】Ipa Guard为iOS应用提供免费加密混淆方案
    【教程】IpaGuard为iOS应用提供免费加密混淆方案 概述:使用ios加固工具对ios代码保护,保护ios项目中的核心代码,#ipagurd年终大促·百厂联动暖冬特惠,超多软控件立享惊喜优惠>>     ​简介iOS加固保护是直接针对iosipa二进制文件的保护技术,可以对iOSAPP中的可执......
  • Java内部类详解
    内部类内部类的分类内部类分类:成员内部类静态内部类局部内部类匿名内部类内部类的概念在一个类里面定义一个完整的类packagecom.lin.clas.demo01;​publicclassBody{​ //内部类 classHead{​ }}成员内部类在类的内部定义,与实例变量,实例......
  • spring使用druid多数据源yml密码加密
    1.依赖<!--Mysql驱动包--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.24</version></dependency><!--Druid--><dependency>......