首页 > 其他分享 >关于加密,解密,摘要,编码的理解和应用

关于加密,解密,摘要,编码的理解和应用

时间:2024-06-13 11:55:04浏览次数:23  
标签:编码 加密 摘要 解密 明文 算法 MD5

故事的开始

那是一个夏天,在杭州,和两位好友吃完饭聊着。他们都是刚刚入行的程序员,讨论着密码在系统中存储的方式MD5.当时的我还是个门外汉,听着他们的讨论,非常有兴趣。那时候我认为MD5是加密放方式(当然现在看来不是)。那时候我认为处理密码的方式是,用户注册后,密码通过MD5加盐方式存入数据库。登录的时候,拿出密码,解密后比较(现在看来是错的)。

时隔多年我记录一下自己通俗易懂的理解(看到最后其实这些算法都涉及高等数学。。。)

1.那先从MD5开始吧。摘要算法主要包括MD5、SHA(安全散列算法)、SHA-1、SHA-256、SHA-384、SHA-512等。现在还有一个主流的 Bcrypt 摘要。摘要总结说:原文本通过算法得到新文本,无法通过新文本得到原文本,特点是不一样的原文本得到的新文本大概率是不一样的(注意是大概率,小概率会一样哦)。如果使用MD5加盐这种古老的方式,也可以替换为 Bcrypt 安全性更高。

2.接下来说说加密解密吧。加解密总结说:原文本通过算法得到新文本,又能通过算法得到原文本的过程。加解密可以分为两大类:对称算法(常见的AES)和非对称算法(RSA)。加密的时候需要一个秘钥,如果解密的时候用的一样的秘钥,那就是对称算法,如果用的不一样的秘钥,那就是非对称算法。(一般加密和摘要是配合使用的,这个和性能安全级别有关系)。非对称算法安全级别高于对称算法,但是性能上差。

3.编码base64,这个可是一个好东西,任何文件都可以转为base64编码方式,常见的是图片。它的编码和解码不需要秘钥,也就不属于加密的范畴。

实际应用

1.需要提供接口给第三方的时候,那么我们总不能直接给接口不做任何校验吧,这样谁都能访问,这也太不靠谱了吧。

这时候,如果第三方不多,例如只有两个,那那那直接给开白名单是一种比较省事的方式,要什么验证。让对方提供服务器ip,我们本服务器只允许你提供的服务器进行访问。好好好,那如果公司发展不错,第三方每天多10个,那运维忙死了,天天要开白名单,还不好维护和确定到底是那个第三方。还是搞验签吧。

(方案1)先来个懒人法,明文数据加盐之后 进行 MD5 得到的新文本是签名,把明文数据和签名都发送到服务器,服务器做一样的事情 先把原文本加盐 进行 MD5 如果得到的新文本和发送过来的签名一致,认为数据有效。(这里的关键是,这个盐,是服务方和第三方商量一致的,只要盐不泄露,则是安全的)。做到这里已经防住了大部分非技术人员和少量技术人员。

那么问题来了,有个前端老兄会使用浏览器的调试功能,能看到明文数据,这个明文数据还是比较铭感的,那在(方案1)中 多加一步,先把明文加密(非对称和对称随便选),对密文加盐 摘要(MD5也可以是Bcrypt)然后发送,服务端对应先验签,就是把密文先摘要 比较是否一致,如果一致才解密处理,否则视为无效数据。(到这里差不多了,大部分企业安全级别没有这么高,数据库存明文密码的大有人在)。

剩下的就是考虑安全级别,一般对称加密和验签足够了,不行就非对称呗。还有防止爆破,还需要加时间戳一起加密验签,超过时间戳一定偏移量也视为无效。行了行了够用了。

如果哪里不对,欢迎指正,谢谢,有帮助点个赞呗

标签:编码,加密,摘要,解密,明文,算法,MD5
From: https://www.cnblogs.com/wangbingchen/p/18245607

相关文章

  • 网址URL中特殊字符转义编码
    网址URL中特殊字符转义编码字符URL编码值空格%20"%22%23%%25&%26(%28)%29%2B,%2C/%2F:%3A;......
  • 用于将字节进行base64编码或解码(C语言实现)
    V1.02024年6月13日发布于博客园目录base64.hbase64.c基本原理见代码注释!base64.h#ifndef_BASE64_H#define_BASE64_H/***@filename:base64.h*@brief:用于将字节进行base64编码或解码*@author:[email protected]*@date:2024年6......
  • 数据结构复习笔记5.6:哈夫曼编码树
    1.前导概念1.定义:设有n个权值{w1,w2,…,wn},构造一棵有n个叶子结点的二叉树,每个叶子的权值为wi,则wpl最小的二叉树叫哈夫曼树。例子:2.结点的路径长度:从根结点到该结点的路径上的连接数3.树的路径长度:就是树的每个叶⼦结点的路径⻓度之和4.结点的带权路径⻓度:结点的路径⻓......
  • Base64编码解码流程的初步学习
    目录什么是Base64编码?为什么要学习Base64编码?Base64编码基础原理介绍Base64编码组成Base64编码索引表Base64编码规则Base64编码过程简记编码流程实战Base64编码(不同情况举例说明)1.待编码字符数量为3的倍数2.待编码字符数量不为3的倍数Base64解码原理简单介绍Base64解码过程Base6......
  • MD5加密算法
    MD5加密算法目录MD5加密算法简介说明应用简介MD5(Message-DigestAlgorithm5)是一种被广泛使用的密码散列函数,它可以产生出一个128位(16字节)的散列值(hashvalue),用于确保信息传输完整一致。MD5并不是一种加密算法(因为它不可逆),而是一种摘要算法或哈希算法。以下是MD5加密(更准确地......
  • 加密好的WPSword文档,忘记密码怎么办?
    在日常办公和学习中,我们经常使用WPSWord等文档处理软件来创建和编辑重要文件。为了保护这些文件不被未经授权的人访问,我们通常会选择给文档设置密码。然而,有时我们可能会因为时间久远或其他原因而忘记自己设置的密码,这时该如何是好呢?下面,我将为大家详细介绍几种应对加密WPSWo......
  • 检查字符串的byte[]是什么编码字符集
    引入依赖<dependency><groupId>com.googlecode.juniversalchardet</groupId><artifactId>juniversalchardet</artifactId><version>1.0.3</version></dependency>包装......
  • Java实际工作里用到的几种加密方式
    1、Base64加密最简单的加密方式,甚至可以说不是加密,只是一种用64个字符表示任意二进制数据的方法。Base64编码原理是将输入字符串按字节切分,取得每个字节对应的二进制值(若不足8比特则高位补0),然后将这些二进制数值串联起来,再按照6比特一组进行切分(因为2^6=64),最后一组若不足6比......
  • sm4加密工具类
    usingOrg.BouncyCastle.Utilities.Encoders;usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceBM.BLL.Utils{///<summary>///SM4工具类///</summary>p......
  • Kingbase单表加密
    开启Kingbase的加密插件修改kingbase.conf,找到shared_preload_libraries配置项,增加sysencrypt插件,多个插件用半角逗号隔开。示例:shared_preload_libraries='liboracle_parser,synonym,plsql,force_view,kdb_flashback,plugin_debugger,plsql_plugin_debugger,plsql......