专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

常用密码算法介绍

  算法种类
  根据技术特征,现代密码学可分为三类:对称算法
  说明:加密密钥和解密密钥相同,对明文、密文长度没有限制
  子算法:流密码算法:每次加密或解密一位或一字节的明文或密文分组密码算法:将明文(密文)分成固定长度的数据块(比特块或字节块),用同一密钥和算法对每一明文(密文)块加密(解密)后得到等长的密文(明文)块,然后将密文(明文)块按照顺序组合起来最终得到密文(明文)
  常见算法:流密码算法:RC4分组密码算法:DES、IDEA、RC2、AES、SM4非对称算法
  说明:加密密钥和解密密钥不相同。公钥加密,私钥解密私钥加签,公钥验签
  常见算法:RSA、DH、DSA、ECDSA、ECC、SM2摘要算法
  说明:把任意长的输入消息数据转化成固定长度的输出数据的一种密码算法,又称散列函数、哈希函数或杂凑函数、单向函数等。摘要算法没有密钥。
  常见算法:MD5、SHA1、SM3实战对称算法RC4说明
  1。加密key长度为1byte256byte
  2。加密后的结果为base16编码的字符串,需进行转换代码packagemainimport(cryptorc4fmt)funcRC4(){加密varkey〔〕byte〔〕byte(fd6cde7c2f4913f22297c948dd530c84)初始化用于加密的KEY,长度1byte256byterc4obj1,:rc4。NewCipher(key)返回Cipherrc4str1:〔〕byte(RC4)需要加密的字符串plaintext:make(〔〕byte,len(rc4str1))rc4obj1。XORKeyStream(plaintext,rc4str1)加密stringinf1:fmt。Sprintf(x,plaintext)转换字符串,base16编码的字符串,每个字节使用2个字符表示fmt。Println(RC4加密后:stringinf1)解密dest2:make(〔〕byte,len(rc4str1))cipher2,:rc4。NewCipher(key)切记:这里不能重用rc4obj1,必须重新生成新的cipher2。XORKeyStream(dest2,plaintext)fmt。Printf(RC4解密后:s,dest2)}funcmain(){RC4()}
  结果:可以看到长度是一致的
  myprojectgorunmain。go
  RC4加密后:4daff0
  RC4解密后:RC4对称算法AES说明
  1。AES是分组密码算法,所以AES的计算包含两部分分组大小:128位密钥大小:128位、192位和256位,三种可选
  2。AES加密过程是在一个44的字节(128位)矩阵上运作,加密时,各轮AES加密循环(除最后一轮外)均包含4个步骤AddRoundKey:矩阵中的每一个字节都与该次回合金钥(roundkey)做XOR运算;每个子密钥由密钥生成方案产生。SubBytes:通过一个非线性的替换函数,用查找表的方式把每个字节替换成对应的字节。ShiftRows:将矩阵中的每个横列进行循环式移位。MixColumns:使用线性转换来混合每内联的四个字节工作模式
  AES有6种加密模式。ECB模式和CBC模式是最常用的两种模式,代码也只实现这两种。
  需要块对对齐(填充)的AES加密模式:ECB、CBC、PCBC,其余模式无需块对齐。
  需要初始向量的AES加密模式:除ECB模式外,都需要初始向量。电子密码本:ElectronicCodeBookMode(ECB)
  ECB模式是最早采用和最简单的模式,它将加密的数据分成若干组,每组的大小跟加密密钥长度相同,然后每组都用相同的密钥进行加密。
  优点:有利于并行计算;误差不会累计(互不干扰)。
  缺点:可能对明文进行主动攻击。
  密码分组链接:CipherBlockChainingMode(CBC)
  CBC模式对于每个待加密的密码块,在加密前会先与前一个密码块的密文异或然后再用加密器加密(图中的圆圈十字符号表示异或操作,下同)。第一个明文块与一个叫初始化向量(IV)的数据块异或。加、解密双方共同知晓密钥和初始化向量才能实现加解密。
  优点:安全性比ECB模式高;是SSL的标准。
  缺点:数据块之间的加密有依赖关系,因此不能并行计算。
  密文反馈:CipherFeedbackMode(CFB)
  CFB模式是用分组算法实现流算法,明文数据不需要按分组大小对齐。
  优点:明文数据不需要按分组大小对齐,即无需填充。
  缺点:同CBC模式,无法并行计算。
  输出反馈:OutputFeedbackMode(OFB)
  OFB模式的过程和CBC模式有点像,但明文数据不需要按分组大小对齐。
  优点:明文数据不需要按分组大小对齐,即无需填充。
  缺点:同CBC模式,无法并行计算。
  计数器模式:CounterMode(CTR)
  CTR模式是在ECB模式的基础上,引入了Nonce随机数和Counter计数器,Nounce随机数和Counter计数器整体可看作计数器,每加密一段明文,计数器向上加一,并且这个计数器都会和初始IV进行连接、加加、异或等运算,然后使用加密器进行加密,最后在和明文异或得到分段密文。
  优点:明文数据不需要按分组大小对齐,即无需填充。
  缺点:加密方和解密方需要同时维护初始IV、Nonce、Counter。
  填充密码分组链接:PropagatingCipherBlockChainingMode(PCBC)
  PCBC模式是CBC模式的改进版,与CBC模式的不同点在于,CBC模式后段明文加密的所需向量是前一段的密文,而PCBC模式后段明文加密所需的向量是前一段明文和密文的异或值。
  优点:同CBC模式。
  缺点:同CBC模式。
  代码AESfuncAES(){origData:〔〕byte(AES待加密数据)待加密的数据key:〔〕byte(ABCDEFGHIJKLMNOP)加密的密钥,只能128位、192位和256位fmt。Println(原文:,string(origData))fmt。Println(CBC模式)encrypted:AesEncryptCBC(origData,key)fmt。Println(密文(hex):,hex。EncodeToString(encrypted))fmt。Println(密文(base64):,base64。StdEncoding。EncodeToString(encrypted))decrypted:AesDecryptCBC(encrypted,key)fmt。Println(解密结果:,string(decrypted))fmt。Println(ECB模式)encryptedAesEncryptECB(origData,key)fmt。Println(密文(hex):,hex。EncodeToString(encrypted))fmt。Println(密文(base64):,base64。StdEncoding。EncodeToString(encrypted))decryptedAesDecryptECB(encrypted,key)fmt。Println(解密结果:,string(decrypted))}CBCfuncAesEncryptCBC(origData〔〕byte,key〔〕byte)(encrypted〔〕byte){分组秘钥NewCipher该函数限制了输入k的长度必须为16,24或者32block,:aes。NewCipher(key)blockSize:block。BlockSize()获取秘钥块的长度origDatapkcs5Padding(origData,blockSize)补全码blockMode:cipher。NewCBCEncrypter(block,key〔:blockSize〕)加密模式,key〔:blockSize〕是IVencryptedmake(〔〕byte,len(origData))创建数组blockMode。CryptBlocks(encrypted,origData)加密returnencrypted}funcAesDecryptCBC(encrypted〔〕byte,key〔〕byte)(decrypted〔〕byte){block,:aes。NewCipher(key)分组秘钥blockSize:block。BlockSize()获取秘钥块的长度blockMode:cipher。NewCBCDecrypter(block,key〔:blockSize〕)加密模式decryptedmake(〔〕byte,len(encrypted))创建数组blockMode。CryptBlocks(decrypted,encrypted)解密decryptedpkcs5UnPadding(decrypted)去除补全码returndecrypted}funcpkcs5Padding(ciphertext〔〕byte,blockSizeint)〔〕byte{padding:blockSizelen(ciphertext)blockSizepadtext:bytes。Repeat(〔〕byte{byte(padding)},padding)returnappend(ciphertext,padtext。。。)}funcpkcs5UnPadding(origData〔〕byte)〔〕byte{length:len(origData)unpadding:int(origData〔length1〕)returnorigData〔:(lengthunpadding)〕}ECBfuncAesEncryptECB(origData〔〕byte,key〔〕byte)(encrypted〔〕byte){cipher,:aes。NewCipher(generateKey(key))length:(len(origData)aes。BlockSize)aes。BlockSizeplain:make(〔〕byte,lengthaes。BlockSize)copy(plain,origData)pad:byte(len(plain)len(origData))fori:len(origData);ilen(plain);i{plain〔i〕pad}encryptedmake(〔〕byte,len(plain))分组分块加密forbs,be:0,cipher。BlockSize();bslen(origData);bs,bebscipher。BlockSize(),becipher。BlockSize(){cipher。Encrypt(encrypted〔bs:be〕,plain〔bs:be〕)}returnencrypted}funcAesDecryptECB(encrypted〔〕byte,key〔〕byte)(decrypted〔〕byte){cipher,:aes。NewCipher(generateKey(key))decryptedmake(〔〕byte,len(encrypted))forbs,be:0,cipher。BlockSize();bslen(encrypted);bs,bebscipher。BlockSize(),becipher。BlockSize(){cipher。Decrypt(decrypted〔bs:be〕,encrypted〔bs:be〕)}trim:0iflen(decrypted)0{trimlen(decrypted)int(decrypted〔len(decrypted)1〕)}returndecrypted〔:trim〕}funcgenerateKey(key〔〕byte)(genKey〔〕byte){genKeymake(〔〕byte,16)copy(genKey,key)fori:16;ilen(key);{forj:0;j16ilen(key);j,ij1,i1{genKey〔j〕key〔i〕}}returngenKey}funcmain(){AES()}
  结果:
  myprojectgorunmain。go
  原文:AES待加密数据
  CBC模式
  密文(hex):49c5e79d2c1167345135323346135484a2ad8e591b05b75ac0d5fcc206fdda90
  密文(base64):ScXnnSwRZzRRNTIzRhNUhKKtjlkbBbdawNX8wgb92pA
  解密结果:AES待加密数据
  ECB模式
  密文(hex):74c3a459214e98d6e91ffc4ea291d63ece558f39d07e3f4ade14adbc3486f60f
  密文(base64):dMOkWSFOmNbpHxOopHWPs5VjznQfj9K3hStvDSG9g8
  解密结果:AES待加密数据非对称算法RSA说明
  1。加密的明文长度不能超过RSA密钥的长度,根据填充方案的不同,RSA加密时,对于原文数据的要求OAEP填充模式:原文长度密钥模长(2原文的摘要值长度)2字节,各摘要值长度:SHA1:20字节SHA256:32字节SHA384:48字节SHA512:64字节PKCA1V15填充模式:原文长度密钥模长11字节,比如密钥长度1024位(即128字节),明文长度不能超过11712811
  2。RSA加密内容的长度有限,这是它的算法决定的,所以一般用RSA加密其他算法的密钥,比如用RSA加密AES的密钥,再用AES算法加密明文数据。如果非要加密大量数据,只能将数据分段进行加密。
  3。RSA一般还是用来签名比较多,如果只是签名用的话,加密明文的MD5值就可以
  4。密文的长度总是密钥的长度的一半
  5。RSA签名也需要选择填充方案,如PKCSV15或PKCSV21(PSS)
  6。RSA签名先计算出消息的消息摘要,然后使用自己的私钥加密消息摘要,所以需要选择计算摘要的算法,如SHA256等样式
  密钥生成有几种方案,我们用openssl生成密钥对,看看公私钥的样式
  生成RSA私钥(无加密)opensslgenrsaoutrsaprivate。key2048查看rsaprivate。keyBEGINRSAPRIVATEKEYMIIEpAIBAAKCAQEA3vK7hHEblXqIw4OlAdyYBoSm6TYW80KH6WenPR24J8FehpxByQY6mpMTRXM4BTAflfouvdNZ9OPAm3IarHaBbc1aXwznzn93yPpnQdBdZq9RDAJA1f5ESrCYYJWiBW88C33EtLF2xiOj1l02HepdFo0FvO0BE19yrS2mcBLH8LTUYAW7dUzjonS1hTKJoi1rZwq6Djp7mxB6hFqsRSIVVypFd6gs2o4GLUJRR9CQLYoceSFECsRef25jhKFxRHaMZJPHkMo9W8CNV7swLatDcObv8AJC7vHmjYVQDSxbQMxtK8fUYGMwS4TLHntIL0tbyQWuvh1f6LaQIDAQABAoIBAEQClFW6shrga2aeefe2DBpokNzwJ2ESKRuIF5t95xXQaxpakJ8xvgTo6aT0SF4ZzGrOuLRa3GrEKFBP4MpNkSWUlcrEzgT7162fjhrxxb7sVTCqQ85GhEZucuk2bprp6qz7Tw9b4U9vNUr661qtukpfoixeuYTKoDMfdbPGnMIVlHb5jRfHfoLarau4Y8DNrOTW73ay84i0n8CwdI4uLAAHF1MskdSKfLFn1QcmFBjFspXNqnyQo3W1LFvyoLy2v7rtQGh3oFlug0p8EguurW4Hmgcfsobyo6Lz4INM5WqNJ7qiltMBRkkrievhOIjL8UIc4MC94ECgYEA99aYQXVk4mFCF6DNqYa28feHwmCIl1x76ylVCk3oOcoH1SLaX4ahZbQKAGLgi3tGZBedYBKi6Yv5DdljSR4XKD0fipl7LKvF1uHLk7JzdL87RdlvEmB0E3oOewzuT5d4t3SiSU4yQqaCFOxX8sNqV5HostI0MdUFjDoMWUCgYEA5kpNJ1Pm6fDWAJLNNqPGrDKcb93ahmpYIsh0G6DJklJxHVHpdxpoLkEduN5MtCK7jcHaoguUyzNuD1TY9mVLakQ4KzspsL9ggqecXSmkM7D1BqL1OdJ9JPjJeo3CPrikYSqSKONzwNjmfekNuYpTKXaEZmPrdYX0d5mqCs7UCgYEAwKFAshAGm5WwgyDuQbGBwe3szLIt6ygfEUh3yIjpKJGIyPZPNNxetUWuPohQQhNztea84UFbA40tyBnuimeATa6kmbNmiTTQtjzjsvB2Fc4Z3EXFQzV2mqzRuH5y97Kr0ntKmG94zSkSDiUsroL3vl6TG0sZi3yCNMVKk6kCgYEAh6od6Z0z231VlODmo9m3oJnwLrazlZvwcA1G2TPf7Oxj2RB9Tth4p0cVC2NqLHSJqOkas3uHDYgEEgbyXCBwXRnzPQSNeuJDKLU1GGznrQQpOg7LuUhdDZbyan1tOay95Cz1zY5hjsKkqvLMQasy3EtqqS4GukwoqU8ekECgYBzqiL6fh1MyHrPfsrgLDogb2pwM9lXLV1djZ5mU2EFnGV3tPOlJRC0VZsVy4XsmjUbBVHc2AUB8xAqzpsurjSPYPk8bY0LpRCF95cIiz6296cUIdn395fH9Or7v5BoXK9twG340jETxkLUh70ZZ7Vm0J4o8wNZZjVQb8lgENDRSAPRIVATEKEY
  生成RSA公钥
  本质上是从私钥中提取公钥opensslrsainrsaprivate。keypuboutoutrsapublic。key查看rsapublic。keyBEGINPUBLICKEYMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3vK7hHEblXqIw4OlAdyYBoSm6TYW80KH6WenPR24J8FehpxByQY6mpMTRXM4BTAflfouvdNZ9OPAm3IarHaBbc1aXwznzn93yPpnQdBdZq9RDAJA1f5ESrCYYJWiBW88C33EtLF2xiOj1l02HepdFo0FvO0BE19yrS2mcBLH8LTUYAW7dUzjonS1hTKJoi1rZwq6Djp7mxB6hFqsRSIVVypFd6gs2o4GLUJRR9CQLYoceSFECsRef25jhKFxRHaMZJPHkMo9W8CNV7swLatDcObv8AJC7vHmjYVQDSxbQMxtK8fUYGMwS4TLHntIL0tbyQWuvh1f6LaQIDAQABENDPUBLICKEY
  查看公私钥明细opensslrsainrsaprivate。keynoouttextopensslrsapubininrsapublic。keynoouttext私钥明细PrivateKey:(2048bit)modulus:00:de:f2:bb:84:71:1b:95:7a:88:c3:83:a5:01:dc:98:06:84:a6:e9:36:16:f3:42:87:e9:67:a7:3d:1d:b8:27:c1:5e:86:9c:41:c9:06:3a:9a:93:13:47:f5:cc:e0:14:c0:7e:57:e8:ba:f7:4d:67:d3:8f:02:6d:c8:6a:b1:da:05:b7:35:69:7c:33:9f:39:fd:df:23:e9:fe:74:1d:05:d6:6a:f5:10:c0:24:0d:5f:e4:44:ab:09:8f:d8:25:68:81:5b:cf:02:df:71:2d:2c:5d:b1:88:e8:f5:97:ed:36:1d:ea:5d:16:8d:05:bc:ed:01:13:5f:72:ad:2d:a6:70:12:c7:f0:b4:d4:60:05:be:ed:d5:33:8e:89:d2:d6:14:ca:26:8f:a2:d6:bf:99:c2:ae:83:8e:9e:e6:c4:1e:a1:16:ab:11:48:85:55:ca:91:5d:ea:0b:36:a3:81:8b:50:94:51:f4:24:0b:62:87:1e:48:51:02:b1:17:9f:db:98:e1:28:5c:51:fc:76:8c:64:93:c7:90:ca:3d:5b:c0:8d:57:bb:30:2d:ab:43:70:e6:ef:f0:02:42:ee:f1:e6:8d:85:50:0d:2c:5b:40:cc:6d:2b:ef:1f:51:81:8c:c1:2e:13:2c:79:ed:fc:82:f4:b5:bc:90:5a:eb:e1:d5:fe:8b:69publicExponent:65537(0x10001)privateExponent:44:02:97:e1:56:ff:ab:21:ae:06:b6:69:e7:9f:7b:60:c1:a6:89:0d:cf:02:76:11:2f:ca:46:e2:05:e6:df:79:c5:74:1a:c6:96:a4:27:cc:6f:81:3a:3a:69:3d:12:17:86:73:1a:b3:ae:2d:16:b7:1a:b1:0a:fc:50:4f:e0:ca:4d:91:25:94:95:ca:c4:ce:04:fb:d7:ad:9f:8e:1a:f1:c5:be:ec:55:30:aa:43:ce:46:84:46:6e:72:e9:36:6f:ff:a9:ae:9e:aa:cf:b4:f0:ff:ef:5b:e1:4f:6f:35:4a:fa:eb:5a:ad:ba:4a:5f:a2:2c:5e:b9:84:ca:a0:33:1f:75:b3:c6:fa:73:08:56:51:db:e6:34:5f:1f:f7:e8:2d:aa:da:bb:86:3e:f0:33:6b:f8:e4:d6:ef:76:b2:f3:88:b4:9f:c0:b0:74:8e:2e:2c:00:07:17:53:2c:91:d4:8a:7c:b1:67:d5:07:26:14:18:c5:b2:95:cd:aa:7c:90:a3:75:b5:2c:5b:f2:a0:bc:b6:bf:ba:ed:40:68:77:a0:59:6e:83:4a:7c:12:0b:ae:ad:6e:07:9a:07:1f:b2:86:f2:a3:a2:f3:e0:83:4c:e5:6a:8d:27:ba:a2:96:d3:01:46:49:2b:89:eb:e1:3b:f2:23:2f:c5:08:73:83:02:f7:81prime1:00:f7:d6:98:41:75:64:e2:61:42:17:a0:cd:a9:86:b6:f1:f7:87:c2:60:88:97:5c:7b:eb:29:55:0b:e9:37:a0:e7:28:1f:54:8b:69:7e:1a:85:96:d0:28:01:8b:82:2d:ed:19:9f:c1:79:d6:01:2a:2f:fa:62:fe:43:76:58:d2:47:85:ca:0f:47:e2:a6:5e:cb:2a:f1:75:b8:72:e4:ec:9c:dd:2f:ce:d1:76:5b:c4:98:1d:04:de:83:9e:c3:3b:be:4f:97:78:b7:74:a2:49:4e:32:42:a6:82:14:ec:57:f2:cf:8d:a9:5e:47:a2:cb:48:d0:c7:54:16:30:e8:31:65prime2:00:e6:4a:4d:27:53:e6:e9:f0:d6:00:92:cd:36:a3:c6:ac:32:9c:6f:dd:da:86:6a:58:22:c8:74:1b:a0:c9:92:52:71:1d:51:e9:77:1f:a9:a0:b9:04:76:e3:79:32:d0:8a:ee:37:07:6a:88:2e:53:2c:cd:b8:3d:53:63:df:a6:54:b6:a4:43:82:b3:b2:9b:0b:f6:08:2a:79:c5:d2:9a:43:3b:0f:50:6a:2f:53:9d:27:d2:4f:8c:97:a8:dc:23:eb:8a:46:12:a9:22:8e:37:3c:0d:8e:67:de:90:db:98:a5:32:97:68:46:66:3e:b7:58:5f:47:79:fa:6a:82:b3:b5exponent1:00:c0:a1:40:b2:10:06:9b:95:b0:83:20:ee:f9:06:c6:07:07:b7:b3:32:c8:b7:ac:a0:7c:45:21:df:22:23:a4:a2:46:23:23:d9:3f:e3:4d:c5:eb:54:5a:e3:e8:85:04:21:37:3b:5e:6b:ce:14:15:b0:38:d2:dc:81:9e:e8:a6:78:04:da:ea:49:9b:36:68:93:4d:0b:63:ce:3b:2f:07:61:5c:e1:9d:c4:5c:54:33:57:6f:a6:ab:34:6e:1f:9c:bd:ec:aa:f4:9e:d2:be:98:6f:78:cd:29:12:0e:25:2c:ae:82:f7:be:5e:93:1b:4b:19:8b:7c:82:34:c5:4a:93:a9exponent2:00:87:aa:1d:e9:9d:33:db:7d:55:94:e0:e6:a3:d9:b7:a0:99:f0:2e:b6:b3:95:9b:f0:70:0d:46:d9:3f:cf:7f:b3:b1:8f:64:41:f5:3b:61:e2:9d:1c:54:2d:8d:a8:b1:d2:26:a3:a4:6a:cd:ee:fc:70:d8:80:41:20:6f:25:c2:07:05:d1:9f:33:d0:48:d7:ae:24:32:8b:53:51:86:cf:f9:eb:41:0a:4e:83:b2:ee:52:17:43:65:bf:b2:6a:7d:7e:b4:e6:b2:f7:90:b3:d7:36:39:86:3b:0a:92:ab:cb:31:06:ac:cb:71:2d:aa:a4:b8:1a:e9:30:a2:a5:3c:7a:41coefficient:73:ab:f8:8b:e9:ff:a1:d4:cc:87:ac:f7:ec:ae:02:c3:a2:06:f6:a7:03:3d:95:72:d5:d5:d8:fe:67:99:94:d8:41:67:19:5d:ed:3f:e3:a5:25:10:b4:55:9b:15:cb:85:ec:9a:35:1b:05:51:dc:d8:05:01:f3:10:2a:ce:9b:2e:ae:34:8f:60:f9:3c:6d:8d:0b:a5:10:85:f7:97:08:8b:3e:b6:f7:a7:14:21:d9:f7:f7:97:c7:f4:ea:fb:bf:fe:41:a1:72:bd:b7:01:b7:e3:48:ff:11:3c:64:2d:48:7b:d1:96:7b:56:6d:09:e2:8f:30:35:96:63:55:06:fc:96公钥明细PublicKey:(2048bit)Modulus:00:de:f2:bb:84:71:1b:95:7a:88:c3:83:a5:01:dc:98:06:84:a6:e9:36:16:f3:42:87:e9:67:a7:3d:1d:b8:27:c1:5e:86:9c:41:c9:06:3a:9a:93:13:47:f5:cc:e0:14:c0:7e:57:e8:ba:f7:4d:67:d3:8f:02:6d:c8:6a:b1:da:05:b7:35:69:7c:33:9f:39:fd:df:23:e9:fe:74:1d:05:d6:6a:f5:10:c0:24:0d:5f:e4:44:ab:09:8f:d8:25:68:81:5b:cf:02:df:71:2d:2c:5d:b1:88:e8:f5:97:ed:36:1d:ea:5d:16:8d:05:bc:ed:01:13:5f:72:ad:2d:a6:70:12:c7:f0:b4:d4:60:05:be:ed:d5:33:8e:89:d2:d6:14:ca:26:8f:a2:d6:bf:99:c2:ae:83:8e:9e:e6:c4:1e:a1:16:ab:11:48:85:55:ca:91:5d:ea:0b:36:a3:81:8b:50:94:51:f4:24:0b:62:87:1e:48:51:02:b1:17:9f:db:98:e1:28:5c:51:fc:76:8c:64:93:c7:90:ca:3d:5b:c0:8d:57:bb:30:2d:ab:43:70:e6:ef:f0:02:42:ee:f1:e6:8d:85:50:0d:2c:5b:40:cc:6d:2b:ef:1f:51:81:8c:c1:2e:13:2c:79:ed:fc:82:f4:b5:bc:90:5a:eb:e1:d5:fe:8b:69Exponent:65537(0x10001)代码RSAfuncRSA(){RSAEncDec()RSASignVerify(crypto。SHA256)}funcRSAEncDec(){origData:〔〕byte(RSA待加密数据)待加密的数据,不能超过指定长度fmt。Println(原文:,string(origData))生成私钥privateKey,err:rsa。GenerateKey(rand。Reader,2048)iferr!nil{panic(err)}ShowRSAKeys(privateKey)生成公钥publicKey:privateKey。PublicKey根据公钥加密encryptedBytes,err:rsa。EncryptOAEP(sha256。New(),rand。Reader,publicKey,origData,需要加密的字符串nil)iferr!nil{panic(err)}fmt。Println(密文(bytes):,encryptedBytes)fmt。Println(密文(hex):,hex。EncodeToString(encryptedBytes))fmt。Println(密文(base64):,base64。StdEncoding。EncodeToString(encryptedBytes))根据私钥解密decryptedBytes,err:privateKey。Decrypt(nil,encryptedBytes,rsa。OAEPOptions{Hash:crypto。SHA256})iferr!nil{panic(err)}fmt。Println(decryptedmessage:,string(decryptedBytes))fmt。Println()}PKCS1格式的keyfuncShowRSAKeys(rsaPrivateKeyrsa。PrivateKey){privateKey:string(pem。EncodeToMemory(pem。Block{Type:RSAPRIVATEKEY,Bytes:x509。MarshalPKCS1PrivateKey(rsaPrivateKey),}))derPkix,err:x509。MarshalPKIXPublicKey(rsaPrivateKey。PublicKey)iferr!nil{return}publicKey:string(pem。EncodeToMemory(pem。Block{Type:PUBLICKEY,Bytes:derPkix,}))fmt。Printf(公钥:v私钥:v,publicKey,privateKey)}签名和验签funcRSASignVerify(algorithmSigncrypto。Hash){origData:〔〕byte(RSA待签名数据)待签名的数据,长度无影响fmt。Println(原文:,string(origData))生成私钥privateKey,err:rsa。GenerateKey(rand。Reader,2048)iferr!nil{panic(err)}ShowRSAKeys(privateKey)生成公钥publicKey:privateKey。PublicKey签名hash:algorithmSign。New()hash。Write(origData)sign,err:rsa。SignPKCS1v15(rand。Reader,privateKey,algorithmSign,hash。Sum(nil))iferr!nil{panic(err)}fmt。Println(签名(bytes):,sign)fmt。Println(签名(hex):,hex。EncodeToString(sign))验签errrsa。VerifyPKCS1v15(publicKey,algorithmSign,hash。Sum(nil),sign)iferrnil{fmt。Println(验签成功)}else{fmt。Println(验签失败)}}funcmain(){RSA()}
  结果:原文:RSA待加密数据公钥:BEGINPUBLICKEYMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuXBB99idiOOKvY3vdNnzgF0XWOrQj9hKb0lqU9phdGC5ngi7gxQpLgzewFL8B5sXTEIBBsGsgszwsjAykvPMjgJs7e6hpnNqCiaX7e936DakCZc7Cgkjv7Qc7Flvy2jA2OyDntVvuRwAgRNQMNBJQR9ErHmhjFJwainmN42U0ng4WvObonAJMJ70LASxpdpifW2LnHQijnHHEJ0ZNDLzBrObcoLwxjMpSg4GazPhgi6bPpBlIEXOSXkNeQk8uGyx9XNor4Vqiql24sSzZnoar1hfpTG7SIAkSuqh8wj7dOzXkbZRfAEVfzS4XKNfFICnP46XuP6WXQIDAQABENDPUBLICKEY私钥:BEGINRSAPRIVATEKEYMIIEowIBAAKCAQEAuXBB99idiOOKvY3vdNnzgF0XWOrQj9hKb0lqU9phdGC5ngi7gxQpLgzewFL8B5sXTEIBBsGsgszwsjAykvPMjgJs7e6hpnNqCiaX7e936DakCZc7Cgkjv7Qc7Flvy2jA2OyDntVvuRwAgRNQMNBJQR9ErHmhjFJwainmN42U0ng4WvObonAJMJ70LASxpdpifW2LnHQijnHHEJ0ZNDLzBrObcoLwxjMpSg4GazPhgi6bPpBlIEXOSXkNeQk8uGyx9XNor4Vqiql24sSzZnoar1hfpTG7SIAkSuqh8wj7dOzXkbZRfAEVfzS4XKNfFICnP46XuP6WXQIDAQABAoIBAAPZIIVUKXC9yBNG7sEuBKVPvbJaKqTgnfsvhgfYAZaO3cDogZ0wDxo226SyWwO9zJQdwyCLJ0Hw7bu6R3DkWshAcGuQgyCOKEdSnUHljjSWQpj0AWEHfZ9Pym29NLnhDiV5jkNP1hhTGFhVTiuGdr2TOImbvI5853hMhswDDWpgpy66z40Lma4w4Uk5kCBi5aYs0KCPZgiBQQVIYHXvB0ys6ev0PJgkXOK51H8yqqFORDsQyMQJFqMzQ3N0qKYTIAcdtzxnihLXEZOLBaREXbfCXKWjZRQocSPcZEHVlct0hbwxka32nCHg12cfn9Wbsq9pj0Dehf3HtAECgYEA4VaEBrIyCnCnH4PxwScTDhBAKolzfQkptsr737Xkpf9xOlbGbJSVmDvuH3ARXbbLVGwtBT9yD5wn01ZrAUgsnCDzKQxLAMbejSaCl7vOXf3ovVNgJiUSLiw44mfnpcvXYa9OKB3GLY8si2gS4If0PNIvuQuj4uXmbEbdW6iG0CgYEA0qvfqi8n1njRkchldQgn8QkGfkUmO8HG9dguCXjGTXJlHfIUCvB65yoPivFLa7FORwWxDuvsoRxW15jg5lYfRo1K0OcIRsWUGRsLPh98H4zey34CYnv4L4DOrKFguskpCC0rj59RTBQO4MwnqoGl4N7uOWvr8s06qwSv7b7ECgYAdcGIbRdiHyKPs2B4TblrUvAvHnn6EeJjQS2a0namwTKXvpJ5yQeqNdosPUXnimQSCXfwQZOzOmFxmM6uAjHhyQ4rqR124Vjx240SJLzcKKhaW0cTq1ObuKdN3OlEndbrqi15zDoB5byaEeS1dM2RzJvzfvPQaQ0LRTojI2sGQKBgQCw6YqTBLSEqbK24r8723kNjRzg143iLkTa8B5rKTrTgdq85fXdTCM5mpWgzU7TqfqdI8dzS2XUSdMXjBdY9nufKKnqUgkePW9HwfEoAxKeABNceX4RLBX7GgiigaL9LTUTNikfdEcfTdQXQRHvPIgaVi6BYBzjXrVKhkQKBgBvothb8QrSe7GLpMNTr5Y6Y5yJoqezDByeqtNhnjHrmzftGnHI36LF1C7RoxAqjizN9ZIZhRdkxA59HALjkp7vieoRmlOVLiW09nXtLmk7LMeUEWXx7u3WkpNfAZywpwWMKzM3aSMtMfvcvVuulZGYFzG33QIP9T9GuX1P7ENDRSAPRIVATEKEY密文(bytes):〔6913721915619817624187252653693225669819621120035209287119970221924116522614931150121911434226188203103143201661202613413822415360341801897989249107612093175145151112189254166107177228121241169918388192198161142144181162191581462051015209587562197103991301295113569123442377246557951130137160109251823104863620712080195477912711524211823423413213128147226749186196209212853217194119165206652252228273112041081672352154642084558100195862435354914212252342451771511716294245154205198160162151912011596168252522252419166116881871181063414324335205212130111215230231187200126144782468572362745141642292024718322084301981537918918425372155241136391558860085178〕密文(hex):4589db9cc6b0f157fc41245de14262c4d3c823d11c47c74602dbf1a5e2951f96795b8f2a1abccb0a038fc942781a868ae0993c22b4bd4f59f96b3dd103af919770bdfea66bb1021c79f11063b758c0c6a18e901274db9e92cd0a0fd13a4b3ec5676382813387457b2ced482e374f338289a06dfb5203685624cf7850c32f4f7f73f276eaea0dd58093e24a5b56c4d1d45520ab5e77a5ce41e1de52490bcc6ca7eb029a40d02d3a64c356f33505318e7a3422f5b10f75a25ef59acdc6a010d7bfc99f06a8fc34e11813a67458bb766a228ff323cdd4826fd7e6e7bbc87e904ef65507ec024a3304a4e5ca2fb7dc541ec6994fbdb8fd489bf188279b583c0055b2密文(base64):RYnbnMaw8Vf8QSRd4UJixNPII9EcR8dGAtvxpeKVH5Z5W48qGrzLCgOPyUJ4GoaK4Jk8IrS9T1n5az3RA6Rl3C9qZrsQIcefEQY7dYwMahjpASdNueks0KD9E6Sz7FZ2OCgTOHRXss7UguN08zgomgbftSA2hWJM94UMMvT39z8nbq6g3VgJPiSltWxNHUVSCrXnelzkHh3lJJC8xspsCmkDQLTpkw1bzNQUxjno0IvWxD3WiXvWazcagENeyZ8GqPw04RgTpnRYu3ZqIozI83UgmX5ue7yH6QTvZVBwCSjMEpOXKL7fcVB7GmU9uP1ImGIJ5tYPABVsgdecryptedmessage:RSA待加密数据原文:RSA待签名数据公钥:BEGINPUBLICKEYMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnFXHUNFP7gWmRNyNdXhGcaTrNim4GFKKPBOWLLGN6jURBODRjosJL2B6kLPDXCO9tPLPm2suKCVdmlaxgEPoN0gYApmUPBf0BCJU8fWRZHrpA4aQ9gsCGnfj5bX8U5WCk03YFgkXHbGer1fJkUxKIksgqOf1Lvr5HPI4oHKjVRA6aOr1qJO82oaQSYSBEmHnQ3Ico7WX2TEQvnt0lrJbt8GDFtcK94SpoLr5jOZy4VFmw4zNCy2XpsC5fGcUGEKeLeB3Hm3zkhts6T4imAyCr679dIcNFGgHKHm8uH7cgNTPfOOjVmOrYgIQRn8j9npR2x0oPnMpvlQIDAQABENDPUBLICKEY私钥:BEGINRSAPRIVATEKEYMIIEpAIBAAKCAQEAnFXHUNFP7gWmRNyNdXhGcaTrNim4GFKKPBOWLLGN6jURBODRjosJL2B6kLPDXCO9tPLPm2suKCVdmlaxgEPoN0gYApmUPBf0BCJU8fWRZHrpA4aQ9gsCGnfj5bX8U5WCk03YFgkXHbGer1fJkUxKIksgqOf1Lvr5HPI4oHKjVRA6aOr1qJO82oaQSYSBEmHnQ3Ico7WX2TEQvnt0lrJbt8GDFtcK94SpoLr5jOZy4VFmw4zNCy2XpsC5fGcUGEKeLeB3Hm3zkhts6T4imAyCr679dIcNFGgHKHm8uH7cgNTPfOOjVmOrYgIQRn8j9npR2x0oPnMpvlQIDAQABAoIBACgrwnN51VgMC5VWNuMgbLl27xmTzsIxM2QMhGInnZe42w6t1isSfuG1oi1AWqq2BZrr14RvBgshOOxmaKMEINMPZDkgONEzFWv7m7EKeT8V8nEd9bbKCOW1lqLGe8Di6ltv54WCUywWWeIac8Ud67mM715Qf6vnLpFL3AccFnp12zG5iDct24hPGzvmXBZXBGj5C8DESUy1HRUxAO6KTPX8lPdweyQKNdL2pUMbdXEeMroL8FNhOkAltSRdAuTj5VDdrgQa022Qdh9JxpagbZD1A6tyupQAAsUTZcBJbTeij9jvyOPS22SelQVEgY5B8QiB81GsWps37WECgYEAwLt2jNRBHsMyIfdhJAsdatRalkdjuDRydW35PRDuwPnf7TxxZCneNEya0qXGV2Dk5MfiTB1WuD6tzjaJOpaiK6slQhrBqJB54j8cdDpvN9a5Sjum0zJsQPgL4NQUgGf2U2shbtxzSG2t3MgQhjPOqoF5bOl5cWLygLxC5gcCgYEAz6efnPhRryUFs9ng5rsQPCRb9gHhapoeqKAToawyAiRvfMQxSMV61gdjXJRV3wnbvdNUc2In6YdHsCC26LtgEyYPoSmIUf7T3MZ8MM6sYTeA0l3qtCX5MazBXxxww64WylZCpucOdKfaUsoTr6qUc2j2eu7YATRFVc9oMCgYEAvj3MzUIObYEbkSQcXWPOg4WxNPKq8eHF08yaxXH6EGijPpcYdqUJF1GYyM9V8tUS6Ej8EAmvMQArQ9kYOGbC7D5RAZsFtrgfB3HB5q9KF32J2T24sMQ0nOrWxqOD1mhfzvaXCtUscAoTfSJ8Ynr2JSK1FjGz3NuDjE2C0CgYEAhqiZzg4N0nk8qHO674URMx8U74QqrJmDFjCwamAjEdaU4aDMoPdGJMkeWzmGDbpY8DeeCEF2FdsK6WTnfsBp7g9c7cEujgDJaElOfVcow59dj48m1TjT0uyvLPdyEXUx3as52anWcrBAB81agiXGYyRtgG0DOZD9wvxhoL4cCgYA6WrasukE5w7wzoRRPIVSGwnSeiG4A8uDaGKa0eNWSoHbggKUTutQ2wnB1O89n4AyDN9tIXKxT0XH3a96AA0RUsW9apbQeuyxGAf2RvarlaLsm99xP2x67YfRXcLByGRIQDRxHR64kBptmZ4MyLp7hyAi4XtXLEO4B9RpmgENDRSAPRIVATEKEY签名(bytes):〔15381652158611212554204344438124183171194144683738210196744085712534393462542471912321982281211587237246462262297322223038575417021925487204235924923519030771852055100972491031206523113821414817513415702056436161923833816336155154119140432481922199813324191882361817678238236164183196170178399179147198458520610171159136182225141881266059532511705301532398918014821623721816320515015111573131014778180251298018517194611121911362401421826022819122512316232172245920895114166271731711391782488272124209230782458612221317115811391111581281961521346421120771489524967051242332221601802182713216223711012618812511013024917710815914112119667872208381242281411247779149221〕签名(hex):9908a5d756707d36cc222c267cb7abc290442526d2c44a2855471922035d2efef7bfe8c6e40c7357edf62ee2e549dee6263936aadbfe57cceb09f9ebbe1e4db914376461f9677841e78ad694af869d00cd40241013ee21513f249b9a778c2bf8c0db6285f15b58ecb54c4eeeeca4b7c4aab2275b4f93c62d55ce65479f88b6e18d587e3c3b35fbaa051e99ef59b494d8eddaa3cd969773490d0a934eb4fb1d50b911c23d70bf88f08eb63ce4bfe17ba203d9e03bd05f72a61badab8bb2f852487cd1e64ef5567ad5ab9e715b0b9e80c498864015784d945ff906463318e9dea0b4da1b84a2ed6e7ebc7d6e82f9b16c9f8d7913424e48d0267ce48d7c4d4f95dd验签成功摘要算法SHA256说明
  摘要算法比对称算法和非对称算法要容易理解。
  对于任意长度的消息,SHA256都会产生一个256bit长的哈希值,称作消息摘要。这个摘要相当于是个长度为32个字节的数组,通常用一个长度为64的十六进制字符串来表示。
  摘要计算的速度比较快:
  以一个60M的文件为测试样本,经过1000次的测试平均值,三种算法的表现为:
  MD5算法运行1000次的平均时间为:226ms
  SHA1算法运行1000次的平均时间为:308ms
  SHA256算法运行1000次的平均时间为:473ms代码funcSHA256(){src:sha256待处理数据fmt。Println(原文:,string(src))m:sha256。New()m。Write(〔〕byte(src))res:hex。EncodeToString(m。Sum(nil))fmt。Println(sha256摘要数据:,res)长度256bit,64字节fmt。Println()}funcmain(){SHA256()}
  结果:
  原文:sha256待处理数据
  sha256摘要数据:703d4c3b6d0a73831112d78b0369511483f0de671839c79b119a6587394b7237最后
  对于上面的算法只进行了简单介绍,具体的实现逻辑大家可以找资料继续研究。
  世界果然是数学的!
  计算机追到根上,都是数学!资料golangrc4加密算法的使用什么是对称加密(对称加密简介)Golang里的AES加密、解密高级加密标准(AdvancedEncryptionStandard,AES)密码学基础:AES加密算法AES五种加密模式(CBC、ECB、CTR、OCF、CFB)AES加密模式总结RSA加密的限制golang实现RSA加密解密算法RSA算法多种生成公私钥的方式RSA密钥证书的生成(4)opensslrsapkey(查看私钥、从私钥中提取公钥、查看公钥)关于RSA加密解密中OAEP填充模式和PKCS1v15填充模式时对于原文数据的要求golang语言rsa加解密及签名验签RSA签名和验签RSA加密、解密、签名、验签(验证签名)RSA算法原理SHA256简介加密算法比较:SHA1,SHA256(SHA2),MD5【Golang】golang实现sha256加密函数最后
  大家如果喜欢我的文章,可以关注我的公众号(程序员麻辣烫)
  我的个人博客为:https:shidawuhen。github。io
  往期文章回顾:设计模式招聘思考存储算法系列读书笔记小工具架构网络Go语言

41岁帕里斯希尔顿当妈后首登台,穿水晶短裙唱跳,比卡戴珊少女当地时间2月11日,帕里斯希尔顿在社交媒体上分享了一组照片,展示此前一天晚间她在亚利桑那州凤凰城的一场派对上进行表演的画面。据悉,穿着粉红色啦啦队制服搭配过膝靴的希尔顿家大小姐,唱每日一味中药茵陈蒿茵陈蒿属利水渗湿药中的利湿退黄药。茵陈蒿为菊科多年生草本植物茵陈蒿或滨蒿的幼苗。我国大部分地区均有分布,主产于陕西山西安徽等地。春季幼苗高约3寸时采收,除去老茎泥土及杂质,晒干。生13种常用中成药大汇总(三)脾虚胃炎肝炎便秘等,收藏备用本文总结黄药师曾写过的13种常见疾病的中成药用法,主要包含脾胃消化科疾病包括脾虚胃炎(胃痛胃胀)反酸嗳气消化不良胃溃疡腹泻便秘痔疮肝炎脂肪肝胆结石胆囊炎等。关于感冒咳嗽咽炎鼻炎新冠广东地区居民肾结石发病率高,因常喝硬水?网上有一些健康养生类文章宣称泌尿系统结石与饮用水的水质有关,并举例说,广东东江水系的钙等矿物质含量高,那里的居民正是因为长期饮用这种硬水,导致其泌尿系统结石的发病率较高。(网络配图每天一药达格列净作用机制降血糖增加萄糖在尿液中的排泄。降血压排钠利尿。降尿酸促进尿酸排泄。减体重可增加尿液排泄葡萄糖5080gd,这相当于消耗200320千卡热量。护心肾降糖降压利尿,抑制神经内分胃火旺盛如何灭?快来看看这5个中成药,能帮你把胃中积热清一清大家好,我是李医生,逢年过节,最开心的莫过于就是亲友聚餐团圆,但是不少人说在吃了辛辣刺激的食物之后,就会出现牙龈红肿,甚至出血疼痛的情况,如果你有这种情况,多见就是胃火旺盛,胃火沿回声报阿尔米隆圣马等三人受伤,纽卡接下来将连战利物浦曼联直播吧2月12日讯在北京时间今天凌晨进行的英超第23轮,纽卡11战平伯恩茅斯的比赛中,纽卡方面遭受了较为严重的球员伤病打击。据利物浦回声报报道,圣马克西曼阿尔米隆以及威洛克均在比赛詹姆斯伤停三大新援首秀浓眉1316湖人擒勇士止连败北京时间2月12日,202223赛季NBA常规赛继续进行,金州勇士主场迎战洛杉矶湖人。全场打完,湖人109103力擒勇士,止住三连败。焦点球员此役,勒布朗詹姆斯伤停,安东尼戴维斯单31分钟10中2,只得9分!不是不培养你,你当不了老大前言在NBA当中有一种球员就是心比天高,命比纸薄。他自己充满雄心壮志,但是往往忽视了自己的能力,这就容易导致被球队抛弃的事情出现。有一种球员他一直以来的目标就是成为球队的核心,成为最顽劣国脚!许家印给他6300万年薪,未能为国效力引争议广州恒大辉煌的时候为什么能夺得2个亚冠冠军8个中超联赛冠军呢?高投入才有高产出,无论是外援还是国内球员,恒大舍得在他们身上花钱。当其他中超球队引进的外援都是名不见经传时,广州恒大就随州高新区淅河镇护航开学季,站好春季开学第一岗(通讯员黎晓云)新时节孕育新希望,新学期吹响新号角。为扎实做好2023年春季开学工作,淅河镇组织中心学校派出所市场监管所等部门精心谋划开局新篇章,全力护航开学季。开学前,淅河镇中心
大跌眼镜!残阵浙江男篮吊打广东队!马尚独木难支,内线被完爆3422!残阵的浙江队,首节吊打了广东队,让人感到意外!浙江队的发挥极其出色,明显有备而来,赖特和余嘉豪的双塔,完爆广东队内线,后者根本就没有做好准备,没想到赖特打得那么好。广东队谁举报了李铁?李铁被带走审查的原因,是遭到了武汉卓尔的举报。武汉卓尔为什么举报李铁?自李铁2017赛季到武汉卓尔后,因其深厚的背景和强大的运做能力,卓尔俱乐部上下给予了吹发铁高度的信任,李铁不但尽心尽力!哈姆强势变阵,詹姆斯认清自己不足,湖人终于通透了在哈姆担任球队主教练后,球队虽然由于外线三分投射能力一直被诟病,但是在防守端的效率确实有提升,哈姆的指导让湖人有了防守端的优势,但是球队输球却是事实,这让球迷们开始质疑哈姆是否能够首轮对手弃权马龙袁励岑不战而胜1月7日,2023年德班世乒赛亚洲区预选赛正式拉开战幕。原本是球迷一直期待的国乒首场比赛,由于也门组合奥马尔易卜拉欣临时退赛,国乒组合马龙袁励岑被判4比0获胜,直接晋级下一轮。国乒杜兰特巴特勒哈登AD都是赛季中申请交易,而我是夏休期篮网前锋凯文杜兰特近日接受了ESPN专访。节选如下正如你所知道的,在很多其他球队,当一个明星球员申请交易时,我想到的是火箭的詹姆斯哈登,森林狼的吉米巴特勒,鹈鹕的安东尼戴维斯,这支浙粤赛后!杜锋炮轰裁判,大汉认差距,王世龙赞2点,赖特表谦逊浙江以114103战胜广东,赛后杜锋非常不满裁判的判罚让球员打自己的球,而不是一味的罚篮,挺没劲的。值得一提的是,浙江最主要的打法就是这样,通过犯规来限制对面的节奏。而且全场比赛浙一加11首销战报出炉!双平台双纪录达成,背后产品力有多强?1月9日上午1000,一加11正式开售,凭借3999元起的价格标配大容量内存和全方位拉满的硬件配置和黑科技加持,一加11仅仅在发布后的预约时间就很快破了自家产品的销售记录,而在开售净水器哪个牌子好,家用净水器科普什么牌子好净水器哪个牌子好,冰尊净水器是领军品牌效果最好!净水器的发明,是由于我们赖以生存的水资源污染越来越严重导致的。现在的人们饮用水主要依靠自来水,所以在家安装一台家用净水器就显得尤其重为什么S30赛季被喷的这么惨?大批玩家卸载,全是策划的锅?其实每次赛季更新王者策划都会被喷,只不过这次S30赛季被喷的有点过分了。一心心念念的专精装被鸽众所周知,王者荣耀给项羽出了一个专精装破城霸王戟,并说是新赛季将会上线,但是这已经开始S30赛季各路版本陷阱,典韦独一档,马可和程咬金难兄难弟!前些天,一直在聊S30赛季的版本之子,今天,则想给大家说一下S30赛季的版本弃子,他们要么是胜率垫底,要么就是综合数据极其拉跨,不太适合冲分,属于急需加强的英雄。对抗路在对抗路的顶Bug机票!商务舱飞洛杉矶喂鸽子顺便拿一堆里程!上次朝伟喂鸽子的1。0机票,终于能出到去美国的了。指定动作商务舱Bug票前言这票终于让老外也发现了。然后终于能凑出来之前没能凑到的去美国的机票。不过这段时间研究的并不是这个Bug票
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网