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值一致则信任该证书。再取出里面的公钥。
流程图如下:

-------------------完事~~~----------------
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
我需要尝试一些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
我有一个.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
我在加密来self正在使用的第三方供应商的值时遇到问题。他们的指令如下:1)Converttheencryptionpasswordtoabytearray.2)Convertthevaluetobeencryptedtoabytearray.3)Theentirelengthofthearrayisinsertedasthefirstfourbytesontothefrontofthefirstblockoftheresultantbytearraybeforeencryption.4)EncryptthevalueusingAESwith:1.256-bitkeysize,2.25
我正在尝试在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
我正在使用Rails3.2.6和Stipe进行支付。是否有可能在不购买ssl证书的情况下进行付款。我可以使用Stripe页面作为我的支付页面吗? 最佳答案 您可以使用stripe.js在技术上跳过SSL但我强烈建议您设置SSL。它所做的是将信用卡信息直接传递给stripe,然后stripe会给你一个token,用于实际进行收费。这样做意味着信用卡信息永远不会接触您的服务器,您不必担心PCI合规性。但是,您仍应设置SSL以防止中间人攻击。您可以在https://stripe.com/docs/tutorials/forms找到有关如何
尝试通过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
我在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(
我每次打开终端时都会收到这个错误:警告: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/
我编写了一个使用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}代码工作正常,但是当程序执行到最后时它会抛出以下错