首页 > 其他分享 >加解密与HTTPS(2)

加解密与HTTPS(2)

时间:2022-12-30 06:33:05浏览次数:35  
标签:公钥 私钥 der 加解密 RSA private HTTPS public

您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~

近些天由于完全放开,我也从“杨过”变成了“杨康”,加之家中亲人故去,所以长久未能更新,特此致歉~

 


 

 

上次说了对称加密算法,这次来说说另外一种加密算法:非对称加密算法。

和对称加密算法不同,在非对称加密算法中,信息的收发双方需要各持有两个密钥:公钥和私钥。公钥和私钥是成对出现的:公钥必须公开,而私钥必须保密。

发送者A用接收者B的公钥加密,接收者B用自己的私钥解密。整个过程是这样的:

 

 

 

有几种常用的非对称加密算法:

1、RSA/DSA

2、ECDSA/ECC

3、PKCS

 

RSA是一种非常常见的非对称加密算法,它的加密和解密算法也都是公开的,其运行机制用一句简单的话来说就是几乎「不可能通过公钥推导出私钥」。

非对称加密算法产生的密钥都是成对出现的,一个公开的公钥,一个由用户自己保存的私钥。

RSA被认为是最优秀的非对称加密方案之一,支付宝的支付接口调用使用的就是RSA。

「不可能通过公钥推导出私钥」的机制,是建立在大整数因子分解的困难性上的,其安全性能够抵抗目前为止已知的绝大多数密码攻击。RSA的加密解密过程如下:

 

 

 

可以看到,如果要得到一个能够产生1024位或2048位二进制的质数乘积,参与运算的两个质数一定都是天文数字。对质数的乘积进行因式分解极其困难,即使是使用计算机也一样,因为素因子太多。这就是为什么可以说几乎「不可能通过公钥推导出私钥」的原因。

 

DSA和RSA的主要不同在于它不用作加密和解密,只用作签名,银行自助柜台、金融APP上的签名软件用的就是它。DSA签名生成速度很快,但验证速度比较慢,加密时更慢,解密却很快,这一点与RSA相反,其安全性与RSA差不多。实际上,OpenSSH 7.0及以上版本默认禁用了DSA算法。

 

全称椭圆曲线加密(Elliptic curve cryptography),以太坊的比特币地址就是用它生成的(比特币椭圆曲线采用的是secp256k1算法:y2 = x3 + 7)。ECC的数学基础是黎曼几何中的无穷远点性质、群率(GROUP LAW)公式,解释起来非常麻烦。

下面可以通过OpenSSL来演示比特币的加密与解密过程。这个OpenSSL在Linux上一般都是默认安装了的,Windows上面的安装可以问问度娘。

 

第一步:生成ECC私钥

# openssl ecparam -name secp256k1 -genkey > private.pem

# 查看结果

# cat private.pem

输出DER格式

# openssl ec -in private.pem -outform DER | tail -c +8 | head -c 32 | xxd -p -c 32 > private.der

# cat private.der

# 查看结果

# 777cba7ba9b5d29a9f27ce67e8e88cce40abe5099e2bc8db4eaa14794726b5a2

 

第二步:生成ECC公钥

通过private.pem生成未压缩公钥

# openssl ec -in private.pem -pubout -outform DER | tail -c 65 | xxd -p -c 65 > public.der

# 查看结果(未压缩公钥 = 前缀04 + x坐标 + y坐标)

# cat public.der

# 044d678b6b0870adbe3419dcce114600fd1a19a660925ad82e61c23489218baf847e2f550371b8ffe405913e9a3b6c3954f0e186bd2bf7769a62ea9fcf1c592d25

# 压缩公钥(前缀03 + x(如果y是奇数),前缀02 + x(如果y是偶数))结果

# 03edc773f78984a68dcad837d7fdf088c2efd434a088d9d6d1a7dc1e8770ea0b

 

第三步:执行Hash160运算

先执行SHA256操作,再进行RMD160运算

# openssl sha256 public.der

# 结果

# 8674a407487bb7808bbb2c1ac12603f1f3a480e98c01abbebd03477c5179f974

# 保存结果

# echo 8674a407487bb7808bbb2c1ac12603f1f3a480e98c01abbebd03477c5179f974 > public_sha256.der

# openssl ripemd160 public_sha256.der

# 结果

# 9870db0ccf40cfd970b503fb031c889d089a4cd4

# 保存结果

# echo 9870db0ccf40cfd970b503fb031c889d089a4cd4 > public_rmd160.der

 

第四步:添加ECC前缀

可以给第3步结果加上Bitcoin的地址前缀(具体地址可以问度娘),例如,普通主网地址是00

# 00 + 9870db0ccf40cfd970b503fb031c889d089a4cd4

# 结果

# 009870db0ccf40cfd970b503fb031c889d089a4cd4

# 保存结果

# vi public_rmd160.der

# 在前面增加00,保存退出

# 查看结果

# cat public_rmd160.der

 

第五步:执行SHA256

执行两次SHA256,取前8位作为校验和

# openssl sha256 public_rmd160.der

# echo c6349f1cb358dcd7af0dc8fd4cf7aa82293142eea7d97f45c83e86595ac22c04 > public_sha256.der

# openssl sha256 public_sha256.der

# 结果

# 9550d445c36fc5d37cadfa1fff385121388a7e15d05fc78244c30e8aa9647908

# 取前八位

# 9550d445

 

第六步:第四步和第五步结果合并

# 第四步结果

# cat public_rmd160.der

# 009870db0ccf40cfd970b503fb031c889d089a4cd4

# 第五步结果

# 9550d445

# 结果合并

# echo 009870db0ccf40cfd970b503fb031c889d089a4cd49550d445 > public_result.der

 

第七步:执行Base58编码

Base59编码是一种独特的编码方式,是Base64的变形,主要用于比特币的钱包地址。

出于演示目的,仅用Base64执行编码

# openssl base64 -in public_result.der

# 结果

# MDA5ODcwZGIwY2NmNDBjZmQ5NzBiNTAzZmIwMzFjODg5ZDA4OWE0Y2Q0OTU1MGQ0NDUK

 

小知识:在比特币系统中,通过私钥能得到公钥,通过公钥能得到钱包地址,也就是:私钥 => 公钥 => 钱包地址,而反向是不可以的。

 

PKCS全称公钥加密标准(Public-Key Cryptography Standards),是由RSA公司设计、发布的一系列安全标准。主要用于证书申请、更新、作废、数字签名、数字信封等创建。例如目前苹果的IOS使用的就是PKCS12标准的证书。

还是以OpenSSL生成PKCS12为例说明。

 

第一步:密钥生成和使用

生产一个1024位的私钥,保存在rsa_private_key.pem里

# openssl genrsa -out rsa_private_key.pem 1024

通过私钥生产公钥,保存在rsa_public_key.pem里

# openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

 

第二步:生成pkcs12文件

密钥库keyrepo.p12,密码123456,有效期1天

# keytool -genkey -v -alias root -keyalg RSA -storetype PKCS12 -keystore keyrepo.p12 -dname "CN=www.company.com,OU=company,O=公司,L=武汉,ST=湖北,C=中国" -storepass 123456 -keypass 123456 -validity 1

 

生成客户端证书

# keytool -genkey -v -alias p12client -keyalg RSA -storetype PKCS12 -keystore keyrepo.p12 -dname "CN=www.company.com,OU=company,O=公司,L=武汉,ST=湖北,C=中国" -storepass 123456 -keypass 123456 -validity 1

 

查看已生成的证书

keytool -list -v -alias p12client -keystore keyrepo.p12 -storepass 123456 -storetype PKCS12

 

将p12证书导出为.cer格式

keytool -export -alias p12client -keystore keyrepo.p12 -storetype PKCS12 -storepass 123456 -rfc -file p12.cer

# 查看.cer文件

keytool -printcert -v -file /p12.cer

 

可以看到,PKCS生成密钥的过程比ECC简单多了。

 

 


 

 

感谢您的大驾光临!咨询技术、产品、运营和管理相关问题,请关注后留言。欢迎骚扰,不胜荣幸~

 

标签:公钥,私钥,der,加解密,RSA,private,HTTPS,public
From: https://www.cnblogs.com/xiangwang1111/p/17013500.html

相关文章

  • C#:https文件下载
    今天在.net4.5环境下用WebClient下载https的文件时,报错: 基础连接已经关闭:发送时发生错误。加上ServicePointManager.SecurityProtocol=SecurityProtocolType.Tls12;......
  • HTTPS 钓鱼攻击:黑客如何使用 SSL 证书假装信任
    让我们回到1994年。无需翻出寻呼机或穿上法兰绒衬衫。这是第一个SSL协议诞生的一年。它由Netscape推出,以满足对称为Internet的新奇发明增加安全性的日益增长的需......
  • HTTPS 钓鱼攻击:黑客如何使用 SSL 证书假装信任
    让我们回到1994年。无需翻出寻呼机或穿上法兰绒衬衫。这是第一个SSL协议诞生的一年。它由Netscape推出,以满足对称为Internet的新奇发明增加安全性的日益增长的需......
  • HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向
    ​​​​HttpServletResponse 和ServletResponse 都是接口具体的类型对象是由Servlet容器传递过来 ServletResponse对象的功能分为以下四种:       设置响应......
  • Harbor之https
    opensslgenrsa-outharbor-ca.keyopensslreq-x509-new-nodes-keyharbor-ca.key-subj"/CN=192.168.10.20"-days7120-outharbor-ca.crtroot@k-har:/apps/harbo......
  • Egg(四)数据加解密之crypto
    crypto插件官网1.安装插件npminstallcrypto--save2.配置文件配置路径config/config.default.jssecret参数可以在配置的时候随意修改,项目运行后尽可能......
  • wininet https请求——不使用openssl也是可以的
     //WinINetHTTPSGet//https请求:https://github.com/netdata/netdata/blob/master/CMakeLists.txt#include<iostream>#include<Windows.h>#include<WinInet.h>......
  • 腾讯云免费申请SSL证书配置https
    证书申请1、进入腾讯云官网,在上方直接搜索SSL,搜索到后点击立即选购;2、点击进去后选择自定义配置,加密标准选择默认的国际标准,证书种类选择域名免费版(DV),勾选同意服务条款......
  • 配置https虚拟主机
    配置https虚拟主机配置httpd.conf,取消以下注释LoadModulessl_modulemodules/mod_ssl.soInclude/etc/httpd24/extra/httpd-ssl.conf[root@liuconf]#vimhttpd.conf......
  • 配置https虚拟主机
    配置https步骤生成证书openssl实现私有CA参考配置httpd.conf,取消以下内容的注释  LoadModulessl_modulemodules/mod_ssl.so  Include/etc/httpd24/extra/......