RSA非對稱加密傳輸---前端加密&解密(VUE專案)
阿新 • • 發佈:2019-01-22
A要傳給B一句話(需要保密),就由B生成一對公鑰和私鑰存好,公鑰就好比一把鎖,鑰匙就是私鑰。B只需要把鎖給A,A把那句話鎖起來,交還給B,在這過程中,即使大家都能看到公鑰(鎖),也是不知道那句話是啥的,然後B拿到鎖好的機密,拿只有自己才有的私鑰(鑰匙)解開,這個差不多就是非對稱加密。
實際開發過程中,後臺生成一對公私鑰,私鑰存在伺服器,把公鑰給前端,前端加密後傳給後端,這是相對比較安全的做法。
npm install jsencrypt
裝好後在vue檔案裡引用
import JSEncrypt from 'jsencrypt/bin/jsencrypt'
很簡單,上demo
存好。下面模擬一下前端的加密。前端就是A。
let encryptor = new JSEncrypt() // 新建JSEncrypt物件 let publicKey = `MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHGBAi30CuorD71ddAY5Pj80a2 FinTK6CJrX3LJZ5FTxJrQdzxbwDVB2mDVgspU5oz7X03TzgWFKkkJm2b4g9G00sA +G9oeGaR+rpFaoDr4BxW+AUd6V1Ps/OkTaLc473XOA0aYTRIwo1Ob3pTJd9Za90e +NRk0c07Vb/mcr0w1QIDAQAB` //把之前生成的貼進來,實際開發過程中,可以是後臺傳過來的 encryptor.setPublicKey(publicKey) // 設定公鑰 let rsaPassWord = encryptor.encrypt('我我我我') // 對需要加密的資料進行加密 console.log(rsaPassWord) //得到加密後的資料
A已經加完密,得到RSA加密後的字串rsaPassWord。
下面模擬一下B的解密,假設已經拿到了這段rsaPassWord,存為secretWord 。只有B才有的私鑰privateKey。
let decrypt = new JSEncrypt() // 新建JSEncrypt物件 let secretWord = 'KfAfOvSSpucpY0YObjdUhzzpSzFulFIFrYwyZ2oACMw9D3emJeWGa5BefU85EVDVLvpZaqug0vdwDSNXLgbhpW1ep1IP3VQwa6f8Q4TLeZepAtqGHkq+J+4vCt4WW2bE2z36bzRHM36H2xC8H2gmMe4EjHAGkmnRxuARQauebXE=' let privateKey = 'MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMcYECLfQK6isPvV\n' + '10Bjk+PzRrYWKdMroImtfcslnkVPEmtB3PFvANUHaYNWCylTmjPtfTdPOBYUqSQm\n' + 'bZviD0bTSwD4b2h4ZpH6ukVqgOvgHFb4BR3pXU+z86RNotzjvdc4DRphNEjCjU5v\n' + 'elMl31lr3R741GTRzTtVv+ZyvTDVAgMBAAECgYBYLX4oE7zwG7pLL4CwUeoUUZEF\n' + '4HcRwgbOM3q9WKHqjITZ4Efc3o79ytSeiKNU4GQxj4Of1YQ/s1LeYe611b9xlNQQ\n' + 'cU4Kbbt+w1IkcFmWNwvBtcZbkjaWqEOs1r8U1ZKQWjYzOaIu+uHP0U166Nnwh4Gg\n' + 'NFFc+yCwjKK1Jz7xQQJBAOnzE7vEVZ0LcdCHw66EABov07i9NSMX07AvuSk+0jRP\n' + '1c3zyiohKjecX4JI3hovJVg4DF3XO9sl0xiNQ6HMwB0CQQDZ2/a3ArVVwZIXGoBx\n' + 'O24NRnwAZV9t7p7c0I5kBEODdcj/N5ZiztB2J64A/aGC9UjcXJhY9/ZsIozmS5R1\n' + 'SMYZAkA2mVtOpAiTCTu7viOmE/puIiFYaRgAo6vs34ZoINgwCz3Lvgy9flX6+oyz\n' + 'vEvRcpVVnGcOc4/tmktE3JsfJMjlAkEAk76t4U0v5vmAdrSdWK1CJDSh0a7t+eKy\n' + 'z/OMLV4K3zNY3WQ4U8gH7alZQwi+qM5p3C/bjbKT5p/DyEaHZsa0uQJAJvIbxT8c\n' + 'Uf57g7auIRpJlHN6nYuNa+/gi0e135GxRmOe5ft1TuGWTbsQz8aZW/mKk7y+OlC1\n' + 'M6riL/WE1sb23Q==' decrypt.setPrivateKey(privateKey) let getWord = decrypt.decrypt(secretWord) // 解密 console.log(getWord) // 輸出,可以在控制檯看到解密得到的欄位
加密解密,也就幾句話的事情。。。。。。