草庐IT

DES|3DES|AES|RSA|DH | CA | SSL(HTTPS)

Ant_blog 2023-03-28 原文

1、对称密钥算法:

加解密速度块,算法使安全的,已知算法无法推出密钥。但是密钥的分发困难。

DES:对称密钥算法,是一种块加密算法,只有一个密钥。加解密都是用一个密钥。

3DES:与DES一样,可以认为使DES的升级版,加密的强度更大。

AES:与DES不一样的是他是基流加密,也就是逐比特进行加密,而AES是块加密。

2、非对称密钥算法:

加解密速度慢,算法安全,拥有双密钥(公钥和私钥),公私钥无法互相推出来。密钥分发容易。

RSA:

公钥加密只能用私钥解密。(数据加密)。

私钥加密只能用公钥解密。(数字签名)。

RAS数据传输过程:

①将要传输的数据进行Hash(MD5或者SHA),得到一个hash值。

②使用对方的公钥对数据进行加密

③使用自己的私钥对hash值进行加密

④将密文及加密后的hash值一起发送给对方

⑤对方收到后使用自己的私钥解密数据拿到明文数据

⑥对明文数据hash运算,获取运算后的hash值

⑦使用对方的公钥对加密后的hash解密

⑧将两此的hash值进行对比,如果一样则数据没有被篡改。同时也能证明该数据确实是由对方发送的。

流程图如下:

 

 3、HTTPS应用(SSL加密):

使用对称与非对称加密算法结合使用。基本原理就是使用非对称密钥加密对称密钥,将对称密钥安全的传输到对方之后,以后的数据加密都使用对称加密算加密,从而增加了加解密的效率。

①使用Hash算法将明文数据加密,获得hash值。

②使用对称密钥将明文数据加密

③使用对方非对称密钥的公钥对对称密钥加密

④在使用自己非对称密钥的私钥对hash值进行加密,将加密的密文、加密的密钥、加密的hash值一起发送给对方。

⑤对方收到之后使用自己的私钥解密对称密钥

⑥使用对称密钥解密密文数据

⑦使用hash算法对明文进行hash运算获得hash值

⑧使用对方的公钥对传过来的hash进行解密

⑨将两次获得的hash进行比较,一样则表示数据没有被篡改,同时也能证明该数据是由对方发出的。

流程图如下:

 

 4、DH(互联网交换密钥算法):

DH一般应用于IPSec-VPN。通过相互交换公钥然后生成相同的子密钥,在使用子密钥进行数据的加解密。

①双方加入同一个组(group 1/2/5)

②加入同一组后会产生一个p参数和g参数(双方pg参数不一样)

③p、g参数会生成一个私钥(双方私钥不一样)

④各自的私钥会产生一个公钥(双方的公钥不一样)

⑤双方交换公钥

⑥将交换来的公钥使用特定的数学公式计算出相同的父密钥(双方的父密钥一样)

⑦再使用相同的父秘钥生成三个子密钥(双方的三个子密钥是一样的)

⑧第二个子密钥用于数据的加密、第一个子密钥用于IPSec-VPN隧道建立时的认证、第三个子密钥用于hash校验。

流程图如下:

 

 5、CA(第三方数字签名认证):

第三方认证主要时用于防伪(就是防止有人冒充另一端通信)。双方通信必须完全信任第三方,由第三方颁发的认证证书来认证对方。

①双方各自将自己的个人信息以及自己的公钥一起发送给CA。

②CA用个人信息及其公钥形成一张证书,再使用Hash算法对该证书进行运算获取其Hash值,将Hash值也放进该证书中,并用自己的私钥加密这张证书。

③再将加密的证书返回回去,同时还将生成一张根证书也返回回去(根证书就是CA的公钥)。

④双方获取到认证证书与根证书之后,再交换认证证书。

⑤将交换来的认证证书使用根证书将其解密,再使用Hash算法对证书数据进行运算,获得一个Hash值,再将两个Hash值进行比较。

⑥两个Hash值一致则信任该证书。再取出里面的公钥。

流程图如下:

 

 

-------------------完事~~~----------------

 

有关DES|3DES|AES|RSA|DH | CA | SSL(HTTPS)的更多相关文章

  1. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  2. ruby - Ruby 中的单 block AES 解密 - 2

    我需要尝试一些AES片段。我有一些密文c和一个keyk。密文已使用AES-CBC加密,并在前面加上IV。不存在填充,纯文本的长度是16的倍数。所以我这样做:aes=OpenSSL::Cipher::Cipher.new("AES-128-CCB")aes.decryptaes.key=kaes.iv=c[0..15]aes.update(c[16..63])+aes.final它工作得很好。现在我需要手动执行CBC模式,所以我需要单个block的“普通”AES解密。我正在尝试这个:aes=OpenSSL::Cipher::Cipher.new("AES-128-ECB")aes.dec

  3. ruby-on-rails - Ruby - 如何从 ruby​​ 上的 .pfx 文件中提取公钥、rsa 私钥和 CA key - 2

    我有一个.pfx格式的证书,我需要使用ruby​​提取公共(public)、私有(private)和CA证书。使用shell我可以这样做:#ExtractPublicKey(askforpassword)opensslpkcs12-infile.pfx-outfile_public.pem-clcerts-nokeys#ExtractCertificateAuthorityKey(askforpassword)opensslpkcs12-infile.pfx-outfile_ca.pem-cacerts-nokeys#ExtractPrivateKey(askforpassword)o

  4. ruby - 使用 AES 的 Rails 加密,过于复杂 - 2

    我在加密来self正在使用的第三方供应商的值时遇到问题。他们的指令如下:1)Converttheencryptionpasswordtoabytearray.2)Convertthevaluetobeencryptedtoabytearray.3)Theentirelengthofthearrayisinsertedasthefirstfourbytesontothefrontofthefirstblockoftheresultantbytearraybeforeencryption.4)EncryptthevalueusingAESwith:1.256-bitkeysize,2.25

  5. Ruby SSL 错误 - sslv3 警报意外消息 - 2

    我正在尝试在ruby​​脚本中连接到服务器https://www.xpiron.com/schedule。但是,当我尝试连接时:require'open-uri'doc=open('https://www.xpiron.com/schedule')我收到以下错误消息:OpenSSL::SSL::SSLError:SSL_connectreturned=1errno=0state=SSLv2/v3readserverhelloA:sslv3alertunexpectedmessagefrom/usr/local/lib/ruby/1.9.1/net/http.rb:678:in`conn

  6. ruby - 如何在非 SSL 或 http 网站上使用 Stripe? - 2

    我正在使用Rails3.2.6和Stipe进行支付。是否有可能在不购买ssl证书的情况下进行付款。我可以使用Stripe页面作为我的支付页面吗? 最佳答案 您可以使用stripe.js在技术上跳过SSL但我强烈建议您设置SSL。它所做的是将信用卡信息直接传递给stripe,然后stripe会给你一个token,用于实际进行收费。这样做意味着信用卡信息永远不会接触您的服务器,您不必担心PCI合规性。但是,您仍应设置SSL以防止中间人攻击。您可以在https://stripe.com/docs/tutorials/forms找到有关如何

  7. ruby - HTTP POST 上的 SSL 错误(未知协议(protocol)) - 2

    尝试通过SSL连接到ImgurAPI时出现错误。这是代码和错误:API_URI=URI.parse('https://api.imgur.com')API_PUBLIC_KEY='Client-ID--'ENDPOINTS={:image=>'/3/image',:gallery=>'/3/gallery'}#Public:Uploadanimage##args-Theimagepathfortheimagetoupload#defupload(image_path)http=Net::HTTP.new(API_URI.host)http.use_ssl=truehttp.verify

  8. ruby - 如何在Elixir中使用AES CBC 128进行加密和解密 - 2

    我在Rails中有一个具有以下方法的应用程序,该方法可以加密和解密文本并与Java客户端通信。defencrypt(string,key)cipher=OpenSSL::Cipher::AES.new(128,:CBC)cipher.encryptcipher.padding=1cipher.key=hex_to_bin(Digest::SHA1.hexdigest(key)[0..32])cipher_text=cipher.update(string)cipher_textexcenddefhex_to_bin(str)[str].pack"H*"enddefbin_to_hex(

  9. ruby - 警告 : PATH set to RVM ruby but GEM_HOME and/or GEM_PATH not set, 请参阅 : https://github. com/wayneeseguin/rvm/issues/3212 - 2

    我每次打开终端时都会收到这个错误:警告:PATH设置为RVMruby​​但未设置GEM_HOME和/或GEM_PATH,请参阅:https://github.com/wayneeseguin/rvm/issues/3212这是在我最近安装zsh(oh-my-zsh)后开始发生的我不知道如何设置GEM_HOME和/或GEM_PATH的路径。 最佳答案 我也面临同样的问题,更改.zshrc中的以下行,exportPATH="/usr/local/heroku/bin:.........."到exportPATH="$PATH:/usr/

  10. ruby - ssl`sysread_nonblock' : end of file reached (EOFError) - 2

    我编写了一个使用ruby​​线程的代码。require'rubygems'require'net/http'require'uri'defget_response()uri=URI.parse('https://..........')http=Net::HTTP.new(uri.host,uri.port)http.use_ssl=true----------endt1=[]15.timesdo|i|t1[i]=Thread.new{hit_mdm(i)sleep(rand(0)/10.0)}endt1.each{|t|t.join}代码工作正常,但是当程序执行到最后时它会抛出以下错

随机推荐