游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

常用密码算法介绍

  算法种类
  根据技术特征,现代密码学可分为三类:对称算法
  说明:加密密钥和解密密钥相同,对明文、密文长度没有限制
  子算法:流密码算法:每次加密或解密一位或一字节的明文或密文分组密码算法:将明文(密文)分成固定长度的数据块(比特块或字节块),用同一密钥和算法对每一明文(密文)块加密(解密)后得到等长的密文(明文)块,然后将密文(明文)块按照顺序组合起来最终得到密文(明文)
  常见算法:流密码算法: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语言

值得收藏!我国被卡了脖子的新材料有这7大类16种一、新材料供应链安全值得重视01全球供应链安全面临挑战2018年,中美贸易摩擦发生,美国进一步对华开启科技战,中兴通讯、中芯国际、华为等多家国内科技公司受到美国制裁……这几款天玑9000芯片的手机,适合在6。18活动期间入手曾几何时,台积电的天玑系列芯片,热度慢慢地高了起来,不过也确实不难用。像天玑8100芯片和天玑9000芯片,这两颗芯片热度现在非常的高。为什么推荐你入手搭载天玑9000芯……别急,降息只是开始,好戏还在后头8月22日,央行宣布LPR最新报价:1年期LPR下调5个基点,降为3。65;5年期以上LPR下调15个基点,降为4。3,若加上浮动加点20BP,利率最多可降到4。1。这是……中缅边境迎来大量的缅甸美女,她们是靠什么生存,你能猜得到吗?经济的发展让祖国越来越强大,很多人也有了资本外出旅游,如今这已经是许多人选择的娱乐方式,也有很多人民已经爱上了旅游。(此处已添加小程序,请到今日头条客户端查看)出国游也成……极端干旱中存活数十年,科学家揭开了水熊缺水不死之谜头条创作挑战赛水熊是缓步动物的俗称,它们以极强的环境耐受能力著称,在一些报道中,甚至被称为不死生物。缓步动物门中的生物俗称水熊虫,在1300多种已知的缓步动物中,许……地大团队在神农架找到与雪球地球有关的长江日报大武汉客户端4月5日讯当地球因为极寒气候冷冻成一团雪球时,生命的出路在哪里?也许神农架绵延的群山知道答案。4月4日,中国地质大学(武汉)童金南教授团队发表最新研究成果,……摩托罗拉继续良心,两款5000mAh新机再降400,4nm芯去年年底,摩托罗拉一口气发布了两款机型,搭载骁龙8Gen1的motoedgeX30,以及搭骁龙888Plus的motoedgeS30,配置给到了很好的方案,而且定价很低,拉开了……透明手机真的要来了!三星秘密研发已成功一半非常惊艳在初代iPhone发布之后,整个手机设计理念就被定型,大屏触摸成为唯一的标准。虽然后续发展除了全面屏,但在创新上依然还是沿用老一套。而在2019年三星华为率先商用了折叠屏手机,……得了糖尿病就要和粥说拜拜?掌握这几点,血糖才不会太放肆作者王若琳审阅何泽民间有一碗粥就是一碗糖水的说法,因为喝粥后我们的餐后血糖值会有不同程度的升高,就像是喝了一碗糖水一样。在很多人眼中,糖尿病人是不能喝粥的,糖……实物首次曝光!NikeSBxAJ4发售日期确定!明天就步入三月了,这个月可以说是狠鞋扎堆,蒂芙尼、白水泥几乎双双都要抢!最近,海外又突然释出消息称,还有一双重磅联名要在三月发售!这下钱包真遭不住了!这双鞋就是让玩……乒乓球星赛昨日战报女双4强全部出炉,今天进行半决赛!乒乓球友您好,我是乒谈。北京时间3月3号,乒乓球印度球星挑战赛继续进行,根据赛程,今天将进行双打项目的半决赛,以及单打项目的八分之一决赛。女双方面,昨天产生了所有的……邂逅古北水镇突如其来的疫情打乱了我们平静的生活节奏,我妈和婆婆两位老人的离世让我感到心中始终汹涌着无穷无尽地压抑、悲伤和痛苦。2021年的五一劳动节,北京的疫情趋于平稳。女儿女婿跟我……
盛夏黑色连衣裙,修身效果好还凉爽,轻轻松松就能穿出精致感有美丽又不冻人的搭配可以推荐吗Donna无袖裹身喇叭形中长连衣裙黑色连衣裙,经典利落的设计,呈现出奢华优雅的心情宽大而纤细的线条,在经典而干净的设计中展现出来,给人……日本男子改iPhone名称只为用AirDrop收集猫咪照片IT之家8月26日消息对苹果产品有一定使用经验的人一定都知道AirDrop功能,而这一功能在日本也因有人利用AirDrops发送色情信息而引发媒体关注。近期又有日媒报导了一则跟……iPhone11发布前,苹果iPhoneXR已占美国iPhoIT之家7月24日消息CIRP近期发布了一份新报告,预估了苹果每款iPhone型号在第二自然季度的销售情况。在iPhone11新品发布之前,iPhoneXR成为美国市场最受欢迎……油价调整消息今天7月15日,调价后全国9295汽油零售价格今天2022年7月15日星期五,7月份第2轮国内成品油为期10个工作日的调价周期已经开始了,并且走出了明显下跌势头。回顾7月份第2轮成品油调价周期内的国际油价走势,调价初就因为……最新苹果iPhone11机模出炉基于CAD图制作IT之家7月17日消息设计师BenGeskin刚刚在Twitter分享了iPhone11的最新机模,据他介绍该机模是基于CAD图制作,并且跟真机大小1:1完全相同。目前有……苹果iOS13备忘录应用会审查用户的手写脏话IT之家8月13日消息有网友发现,iOS13内置的备忘录应用会自动检查用户的手写脏话。如果用户在备忘录中手写一些脏话,当应用为用户建议标题时,会自动屏蔽脏话。Reddit……重新回归的中兴,大家期待它的表现吗?熟知手机市场的朋友,一定了解中兴,曾几何时也是争霸市场的手机品牌。中兴终端也发布了给合作伙伴的一封信《冲破时坚,蓄势中兴》,信中对中兴终端的战略路线和成果进行了回顾、检阅和展望……新版苹果Mac产品,扬声器和耳机可同时播放不同音频IT之家11月10日消息据博主RogueAmoeba的消息,他发现新版的MacBookAir和Macmini内置的扬声器和耳机是独立的两个设备,也就是说,这扬声器和耳机可以同时……资生堂护理道芳氛头皮舒缓洗发露怎么样?好用吗?资生堂是很多妹子超喜欢的化妆品品牌,资生堂家有很多非常好用的产品,深受大家喜爱,资生堂家的护发产品也很有名,那么资生堂护理道芳氛头皮舒缓洗发露怎么样?好用吗?资生堂护理道芳氛洗……保护个人隐私,四步摸清苹果到底用了你的哪些数据苹果公司正在于采取进一步措施保护用户的个人数据和隐私。目前,苹果公司使用户获取其个人数据的业务已经覆盖美国和加拿大。这一业务定时更新,并且其数据隐私页面遵循欧盟《通用数据……凡事,顺其自然最好01hr接儿子回家的路上,我们聊天的内容总会是天马行空。一天的学习,路上的轻松,对于他的大脑放松,一定是有好处的。我们的聊天内容,也是不设限的,还不,我们突然聊到了……健康监测带动,智能手表水涨船高最近人们对心率和血氧、肺功能等指标的关注与日俱增,有着健康监测功能的智能手表市场收获了一波关注度。记者近日走进北京王府井苹果终端销售体验店,智能手表区域人头攒动,消费者尝试着测……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网