摘要:不能把公鑰當私鑰,私鑰當公鑰使用,因為私鑰可以提取出公鑰。私鑰加密的過程稱為簽名,因為公鑰是公開的,誰都能解密,所以無法保密信息,只能用于驗證簽名者是私鑰持有人。一般也只用來加密密碼。
并沒有體驗多少庫,只看了一個npm里最多人用的一個庫:
node-forge : 接口文檔
rsa小知識加密解密用的key是成對的,分別稱為私鑰和公鑰,私鑰必須存放在服務器等別人無法獲取到的地方,公鑰可以公開,誰都可以獲取。
不能把公鑰當私鑰,私鑰當公鑰使用,因為私鑰可以提取出公鑰。
公鑰加密的內容,只有私鑰能解密,公鑰不能解密自己加密的內容。
私鑰加密的過程稱為簽名(sign),因為公鑰是公開的,誰都能解密,所以無法保密信息,只能用于驗證簽名者是私鑰持有人。
前端代碼// 他們github有提供 forge.min.js , 不用webpack的項目也可以直接引用 import forge from "node-forge" const message = "要加密我了" // 原文長度有限制,而且中文還要url編碼,所以不能加密太長的字符串。一般也只用來加密密碼。 const publicKey = "-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqM+l9ZWy1Frt6felFFLmfZNls VbU1dKpF8Rx83FtKCsztO5k/iV5N9BbfHFUg9Y40b/EK2j/BPc1xlLYAHMXn6563 XCwZ4IuCxvfOwz9qT9gkKBxkI5b0rnikkSWTGlJEk2PdZ7Plc73Fa+bx3PvuKvMd cKWvd80+vt9+b/7hrwIDAQAB -----END PUBLIC KEY-----" const publicK = forge.pki.publicKeyFromPem(publicKey) const encrypted = publicK.encrypt(encodeURIComponent(message), "RSA-OAEP") // 經過url編碼,后端解密后需要url解碼 console.log("密文:", encrypted) // 雖然亂碼,但可以直接發給后端解密
ps. 以上代碼建議使用try,因為加密中如果出現問題,會throw Error
nodejs端代碼const forge = require("node-forge") const privateKey = "-----BEGIN PRIVATE KEY----- MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKoz6X1lbLUWu3p9 6UUUuZ9k2WxVtTV0qkXxHHzcW0oKzO07mT+JXk30Ft8cVSD1jjRv8QraP8E9zXGU tgAcxefrnrdcLBngi4LG987DP2pP2CQoHGQjlvSueKSRJZMaUkSTY91ns+VzvcVr 5vHc++4q8x1wpa93zT6+335v/uGvAgMBAAECgYArxUnou6qnL39rUvIol9ncyfy4 RZpicuxPLGCdI7Y+ZmSpJciVdGhSN9Gh8xFZdozpo1gj6Fi5A4HQEeR0RvIF9Rgh ERblj1rRWqxPcsIddOO9VaknQPICWKqEW9+E1bEcyNUblCHA4LGyQwmuEFUb/Tkj xAghIHuEBCe0GFiVwQJBAN5i5QSoOIpdFHA0c981E4VhHc/muXwjx1HfE1pcuuFb Ty3OwEoZdFp3LIjBnBkPRneLTNjo5WTIwrmfsy6VDF8CQQDD7c6d/nKiJwIESlr+ /idqXAPNR/iS1YX3Nqtk9jgrgf5zULHr2nbk7MDas5S9Z9XPdUmxtnP44dhoGvDk zyyxAkB7XBxyQuZqSkvGGjKUhJq5iC/DXddSd35fegEARSQdUktPu7qK4Cfc7vKz QcLXW9PZCFqukDJ/f6YU1fPNSTy9AkADQ78hms/GK+g4shR6EzoM56OYlA5sQ+qL h/mrIP8mmm/m8/1C9MzuW5OLEVr1HPnPDyE/OM8N4pV8hpZk+Z7BAkEAzaFstazA xLzZOBWhvOzzo722glZ7HVezhMocLu7Y3EOXP/nbx09JpU3U7Egp5UVp0aiknh/Q ez4Cc4ksMedxdA== -----END PRIVATE KEY----- " const privateK = forge.pki.privateKeyFromPem(privateKey) const decrypted = privateK.decrypt(encrypted, "RSA-OAEP") // encrypted 為前端傳過來的密文 console.log("原文:", decodeURIComponent(decrypted)) // decrypted 為原文
ps. 以上代碼建議使用try,因為解密中如果出現問題,會throw Error
ps. 以上例子用了RSA-OAEP規則,其實rsa還有很多加密規則,我粗略查了一下,據說RSA-OAEP是目前比較新的方式,另外有一些舊的規則已經不推薦使用了,留著只是為了向上兼容。沒有深入查下去,因為我怕接下來要研究密碼學了...
ps. 如果覺得加密后的字符串是亂碼不好看,或者擔心傳輸會出問題,可以使用base64轉一下,服務端接收到則先解析base64再解密。
生成密鑰公鑰對const forge = require("node-forge") const { rsa, publicKeyToRSAPublicKeyPem, privateKeyToPem } = forge.pki rsa.generateKeyPair({ bits: 2048, workers: 2 }, function (err, keypair) { if (err) { return } // 這里就生成了字符串的公鑰和密鑰了,可以把生成結果保存起來 console.log({ publicKey: publicKeyToRSAPublicKeyPem(keypair.publicKey, 72).replace(/ /g, ""), privateKey: privateKeyToPem(keypair.privateKey, 72).replace(/ /g, "") }) })
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/105876.html
摘要:前言因公司現有后臺管理系統項目需對部分網絡請求接口的重要數據進行加密,整合了一套簡單的基于加密機制的前端解決方案。用戶已登錄成功,頁面刷新后將會重新生成,這時候需從中獲取并和上傳后端,后端重新綁定和。 前言 因公司現有后臺管理系統項目需對部分網絡請求接口的重要數據進行加密,整合了一套簡單的基于 RSA + AES 加密機制的前端解決方案。 參考文獻: crypto 廖雪峰 crypt...
摘要:簡介地址實際項目中的登陸認證接口調用支付接口調用等場合經常涉及到等算法。各大銀行接口中經常使用算法對調用接口參數進行簽名防篡改。使用端見端見特點便于理解,使用廣泛。這就使加密的計算量很大。對方收到信息后,用不同的密鑰解密并可核對信息摘要。 PHP-RSA簡介 github 地址 https://github.com/lmxdawn/PH... 實際項目中的登陸認證、web api接口調...
摘要:簡介地址實際項目中的登陸認證接口調用支付接口調用等場合經常涉及到等算法。各大銀行接口中經常使用算法對調用接口參數進行簽名防篡改。使用端見端見特點便于理解,使用廣泛。這就使加密的計算量很大。對方收到信息后,用不同的密鑰解密并可核對信息摘要。 PHP-RSA簡介 github 地址 https://github.com/lmxdawn/PH... 實際項目中的登陸認證、web api接口調...
摘要:簡介地址實際項目中的登陸認證接口調用支付接口調用等場合經常涉及到等算法。各大銀行接口中經常使用算法對調用接口參數進行簽名防篡改。使用端見端見特點便于理解,使用廣泛。這就使加密的計算量很大。對方收到信息后,用不同的密鑰解密并可核對信息摘要。 PHP-RSA簡介 github 地址 https://github.com/lmxdawn/PH... 實際項目中的登陸認證、web api接口調...
摘要:另一方比如小明得到公鑰之后,雙方就可以通信。然而,中間人還是可能截獲公鑰,然后自己弄一對秘鑰,然后告訴小明說是小紅的公鑰。這樣,小亮在簽署小紅的身份證的時候,可以在小紅身份證后面附上自己的身份證。一般來說,自簽名的根身份證用于公司內部使用。 前言 自從 Lets Encrypt 上線之后,HTTPS 網站數量占比越來越高,相信不久的未來就可以實現全網 HTTPS,大部分主流瀏覽器也對 ...
閱讀 639·2021-10-13 09:39
閱讀 1449·2021-09-09 11:53
閱讀 2638·2019-08-29 13:55
閱讀 722·2019-08-28 18:08
閱讀 2586·2019-08-26 13:54
閱讀 2406·2019-08-26 11:44
閱讀 1835·2019-08-26 11:41
閱讀 3759·2019-08-26 10:15