一。对称加密1、什么是对称加密对称加密是指发送方使用一种算法对密钥密钥和明文报文进行加密,然后发送加密后的密文;接收方必须知道密钥密钥并使用相同的算法解密为可读的明文。所以双方都必须知道这个key2。几种常见的对称加密算法:DES、TripleDES、RC2、RC4、RC5和Blowfish等经典的加密算法有这三种:可以暴力破解)3DES:原理和DES几乎一样,只是用三个密钥对同一个数据进行三次加密,以增强加密强度。(缺点:需要维护3个密钥,大大增加了维护成本)AES(AdvancedEncryptionStandard):高级加密标准,目前由美国国家安全局使用,苹果的keychainaccess采用AES加密。它是现在公认的最安全的加密方式,也是对称密钥加密中最流行的算法。2.非对称加密经典非对称加密RSA简介:非对称加密算法也称为现代加密算法。非对称加密是计算机通信安全的基石,保证加密数据不被破解。非对称加密算法需要两个密钥:公钥(publickey)和私钥(privatekey)。公钥和私钥是一对。如果数据是用公钥加密的,只有对应的私钥才能解密。如果数据是用私钥加密的,那么只能用对应的公钥解密。特点:算法强度复杂,安全取决于算法和密钥。加密和解密都很慢。与对称加密算法比较:对称加密只有一个密钥,而且是非公开的。如果要解密,就得让对方知道密钥。非对称加密有两个密钥,其中一个是公开的。RSA应用场景:由于RSA算法的加解密速度比对称算法慢很多,所以在实际应用中,数据本身的加解密通常采用对称加密算法(AES)。使用RSA算法加密,传输对称算法所需的密钥。三。其他加密1.MD5加密2.SHA加密3.HMAC加密4.js例子1.AES对称加密//安装crypto-js库,npminstallcrypto-js-S,有很多加密算法importCryptoJSfrom"crypto-js"importAESfrom"crypto-js/aes"constenData=AES.encrypt(JSON.stringify({"name":"zhao.cuiping"}),"gegee9999").toString()console.log("enData=",enData)constdeDataBytes=AES.decrypt(enData,"gegee9999")console.log("deDataBytes=",deDataBytes)console.log("deData=",deDataBytes.toString(CryptoJS.enc.Utf8))2.RAS非对称加密需要使用openssl命令在linux上生成一对Secretkey:公钥和秘钥生成私钥:opensslgenrsa-outrsa_1024_priv.pem1024使用私钥生成公钥:opensslrsa-pubout-inrsa_1024_priv.pem-outrsa_1024_pub.pem//安装jsencrypt库:npminstalljsencrypt-S//加密信息importJSEncryptfrom"jsencrypt"letdata={"name":"zhao.cuiping"}//公钥letpub_key=`-----BEGINPUBLICKEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCigl9qBi6/wNAZLbU/P+7t6AvIyHHHdiOmbbInHrv1ihRXFCpTQLHBg7MoImLGiS858i43T2sMSWnWfG5wfasLtblDPqodL7/O50Z5urICs3/WlbK/qeluHKVwhC3wfq+y1gdOQf+90GFOi3uyF03UhYSiyFlLpfTR13vwR8LBNwIDAQAB-----结束公钥-----`;//私钥letprivate_key=`-----BEGINPRIVATEKEY-----MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMvbPyPuExTOqhjouNe8Y6DzGIWwFVPxQRNAQ56NNBYy67nKmr2YB44UXz49AUTagbjikQyJHvmcL6tnJtNwEKc2yrrtag1NY25oENOoGIC+ts0iTTiuvus0IOGy6m6LxGrlN9SvW8nCw3m3L0XDZnx6XyTxBu8J0m0HUJTI5zUBAgMBAAECgYBFWlmox54GPijwQHxiKN1cLFfzY2xeGn2hJwPaNP+7bad0ldD/H3GyjIu6iNadrhjj5XCjayL2mIQ/M+Cpnj6LiLvmEIlSqRy6X4hV/DbesVWvfFv+QnFV53wo5oEwGS8BxED11lbEVY59B6UWpPCNrWVSOaQhtgt3A23bw9MwgQJBAPkJdVodDqx5A4f0RejFj8J4mFWToMaQdaqp1QrzkHoFH0pe8Gq2JGME32FAc5QIa4J8iLPUiSqK0G6gEC0Igv0CQQDRjmXbgX+/sbPxcOe2isF+cXOyahvUKWcyuu0HAqQU4W546+G0SjgzWJ00YajTtJBNjTCBR8L8+zjaxOtIkcNVAkB/+IFKPjZFIKZU3YxzEdpO14OILiVnA+LDQSRNzV1HpowuvlySqWhHTcCwC9uYjT8ZvX7N0gBuUQjMYAoP6hjNAkB7NdNztXdsOUqIqg7DSGAuPPx+qV7FZraToE5e8dGRqV4v4NjrDTxwDCkaNFV0bFTwFBSx3oSqA/fQwTlpiLKlAkEAhbyo9sJAbo2RFo3triIPCpufgAlgHl45aDimleZbko5nC100R7t6rUUs5itzjiY1Psn0yb6darH3dXx0o795Jlg==-----私钥结束-----`;//新的JSEncryptletjs_encrypt=newJSEncrypt();//初始化公钥js_encrypt.setPublicKey(pub_keyv.jsset_initializetheprivatekey);//c(私钥);//通过公钥加密letencrypted=js_encrypt.encrypt(JSON.stringify(data));console.log("非对称加密后=",加密);//私钥解密letuncrypted=js_encrypt.decrypt(encrypted);console.log("非对称解密后=",uncrypted);
