公钥 私钥_公钥 私钥 签名 验签 说的啥?
发布日期:2021-06-24 01:28:19 浏览次数:3 分类:技术文章

本文共 2411 字,大约阅读时间需要 8 分钟。

公钥 私钥 签名 验签 说的啥?

公钥加密,私钥解密 私钥签名,公钥验签

散列算法

散列算法,也叫做哈希函数,是从一个任何一种数据中创建小的数字方法,散列函数把消息或者数据压缩成摘要,有时候也叫做摘要算法。 把数据量变小,将数据的格式固定下来。

常用的算法有:MD5 SHA1

MD5

MD5 不是一种加密算法,是一种摘要算法,无论多长的输入, MD5 都会输出长度为 128bits 的一个串。

public static final byte[] computeMD5(byte[] content) {    try {        MessageDigest md5 = MessageDigest.getInstance("MD5");        return md5.digest(content);    } catch (NoSuchAlgorithmException e) {        throw new RuntimeException(e);    }}

SHA1

SHA1 算法也是一个摘要算法, SHA1 比 MD5 更加安全,对于长度小于 2^64 位的消息,SHA1 会产生一个 160 位的消息摘要。

public static byte[] computeSHA1(byte[] content) {    try {        MessageDigest sha1 = MessageDigest.getInstance("SHA1");        return sha1.digest(content);    } catch (NoSuchAlgorithmException e) {        throw new RuntimeException(e);    }}

摘要算法有摘要特性和不可逆特性,一般用于检查文件的完整性数据签名的场景。

加密解密

加密,解密,其实就是将原来的明文文件,使用某种算法,进行计算,得到一段不可读的数据:"密文",是用来保护数据的,保证数据不被非法窃取。

加密算法

对称加密

对称加密,是指的就是:加、解密使用的是同一串秘钥,所以叫做对称加密,对称加密只有一个秘钥作为私钥。

c8b7bdf2285d86c7ad2a6083e54c1ffe.png

常用算法有:DES、3DES、Blowfish、IDEA、RC4、RC5、RC6和AES

优缺点

对称加密比非对称加密算法效率很高,运行速度快,但是 不是非常安全,秘钥管理分发困难。

非对称的加密

指的是加、解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥,公钥加密,私钥解密,反之,私钥加密,公钥解密。

1ff766018b1677d61b51f0ef52c5ab6f.png

常用算法有:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)

优缺点

安全性更高,公钥是公开的,私钥自己保存, 缺点是运行时间长,速度慢,适合对少量数据进行加密。

编码算法

Base64

Base64 算法就是编码算法,不是加密算法。Base64 编码的目的是把任意二进制编码成文本。

为啥要进行base64编码呢?

一般是因为二进制进行数据传输时,网络中间的有些路由会把 ascii 码中的不可见字符删除,导致数据不一致,因此一般会进行 url 进行 base64编码

测试代码:

String str="测试";    String b64=Base64.getEncoder().encodeToString(str.getBytes("utf-8"));    System.out.println("base64编码之后:"+b64);    String ori=new String(Base64.getDecoder().decode(b64),"utf-8");    System.out.println("base64解码之后:"+ori);

运行结果:

base64编码之后:5rWL6K+Vbase64解码之后:测试

base64 编码

utf-8 -> base64(编码) -> ASCII

base64 解码

ASCII -> base64(解码) -> utf-8

URLEncode

Http协议中参数的传输是"key=value"这种键值对形式。

name1=value1&name2=value2

测试代码:

public static void main(String[] args) {    //url编码    String str="测试";    String urlStr=URLEncoder.encode(str);    System.out.println("url编码之后:"+urlStr);    String deStr=URLDecoder.decode(urlStr);    System.out.println("url解码之后:"+deStr);}

运行结果

url编码之后:%E6%B5%8B%E8%AF%95url解密之后:测试

签名验签

数字签名,就是通过可鉴别的数字信息验证身份的一种方式。

数据前面有两种运算: 签名、验签。

  • 发送者使用可以代表自己身份的私钥进行签名。
  • 接受者使用私钥对应的公钥进行验签。这样就实现了对消息发送者身份的验证。

462562a1be73a2004937386a0e66cf1a.png

签名验签的作用

签名验签可以验证发送方身份,防止 中间人攻击 ,CSRF 跨域伪造身份攻击。

签名验签个过程

消息发送者:

  1. 报文明文(xml)转换成字节数组, UTF-8 编码。
  2. 使用 base64 进行编码,生成消息内容数据: msg
  3. 使用 SHA1 对字节数组进行签名。生成摘要数据: sign

消息接收者:

  1. 接受消息msg消息后进行 base64 解码。
  2. 使用 SHA1 算法进行数据msg+sign 验签。

欢迎关注公众号:程序员开发者社区

397bfc68524f8f5e17cd3e1793276cb9.png

转载地址:https://blog.csdn.net/weixin_29240711/article/details/112694285 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:硬件加速_中国移动发布NFV硬件加速技术白皮书 推进异构计算成熟
下一篇:360全景偏移调整_360分体机拼接步骤

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年03月22日 14时21分56秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

php 404配置,phpcms如何配置404 2019-04-21
matlab wash矩阵产生,洗衣机净衣效能与衣损程度的关系分析 2019-04-21
php中如何调用sql server,php调用SQL SERVER 2008及以上版本的方法 2019-04-21
python多线程实现kmeans,3种方式实现python多线程并发处理 2019-04-21
matlab 变量不存在,matlab程序运行时提示变量未定义 2019-04-21
php编码函数 base58,1. Base58可逆加密 2019-04-21
oracle 在需要下列之一,Oracle存储过程中PLS-00103:出现符号“/”在需要下列之一时:(... 2019-04-21
oracle10g dblink优化,Oracle10g通过dblink访问数据异常 2019-04-21
linux安装时的iso文件,直接用ISO文件在linux上安装新系统 2019-04-21
linux修改文件权限为所有人都可以访问,Linux 笔记分享八:文件权限的设定 2019-04-21
linux中卸载ambri-servle,Kerberos 命令使用 2019-04-21
linux二进制反编译,Xori:一款来自BlackHat 2018的二进制反汇编和静态分析工具 2019-04-21
linux两台主机添加信任,Linux两台机器间添加信任,实现不用密码问,互传文件... 2019-04-21
linux 自动获取ssl证书,linux生成自验证ssl证书的具体命令和步骤 2019-04-21
linux基础命令20个,20-linux中基础命令 2019-04-21
重置网络配置 android,重置Android移动网络信号? 2019-04-21
java约瑟夫环pta上_cdoj525-猴子选大王 (约瑟夫环) 2019-04-21
java++记录+运行_记录java+testng运行selenium(三)---xml、ini、excel、日志等配置 2019-04-21
mysql居左查询abcd_MySql速查手册 2019-04-21
loadrunner 错误: 无法找到 java.exe_LoadRunner错误及解决方法总结 2019-04-21