フロントエンド RSA 暗号化と復号化 (jsencrypt.js)
初めに書きます
RSA 暗号化は、一般に公開キー暗号化と秘密キー復号化であり、主にバックエンドにパラメータを渡すためのフロントエンド公開キー暗号化と、バックエンド秘密キー復号化に使用されます。今回使用したシナリオは、システム アドレス バーを介してパラメータを転送することであり、パラメータは暗号化する必要があります。
RSA暗号化を利用する場合はjsencryptを使用する必要がありますが、使い方ではインストール方法と使い方を紹介します。
jsencrypt の概要
jsencryptはrsa暗号化・復号化をベースとしたjsライブラリであり、利用時にはインストールが必要です。
npm install jsencrypt
説明書
1. RSA キーの生成
インターネット上では多くの人が RSA 暗号化の使用を紹介していますが、鍵がどのようにして得られるのかを知っている人はほとんどいません。これには言葉もありません。現在、方法を紹介中です(オンラインで鍵を生成できるツールサイトもいくつかありますので、ご自身で検索してください。ここでは紹介しません)
Mac システムには OpenSSL (オープンソース暗号化ライブラリ) が組み込まれているため、ターミナル上でコマンドを直接使用できます。
Windows システムでは git コマンド ライン ツールを使用できます (ここでは、コマンド ラインの入力に git bash を使用することに注意してください。cmd と Powershell はコマンド ラインを認識できません)
- 秘密キーを生成します。キーの長さは 1024 ビットです。
openssl genrsa -out private.pem 1024
コマンドラインを実行すると、次の図が表示され、秘密キーが正常に生成されたことが示されます。
- 秘密鍵から公開鍵を抽出する
openssl rsa -in private.pem -pubout -out public.pem
コマンドラインを実行すると、次の図が表示され、公開キーが正常に生成されたことが示されます。
秘密キーと公開キーが正常に生成されると、プロジェクト内に private.pem と public.pem という 2 つのファイルが生成されます。
秘密鍵:
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDNNorgFngK1zjHOnQlIUh5NjOxZIiEPZ8Knu6B/IyY0LBRToo1
TZC7/nK6j8on/2sBdv5nFuTwlOpW9UL8C4yZJdjTwYXn5X+wZZsz1RXNI5zjhSXu
GeYzF7WhxusKo6zrR6b0IMNg2W016PWU3UkjOXxoaIGkMN77oIorPP5bHQIDAQAB
AoGABOdOvjgLOkcWRjxxVgnLj4nqBk0erfpC+J//lv+P5H7oF6lGyCtIUBWubCLP
c9E4n1pWjeQQKGeGiflmVlt4So2UPQJD/fvpmT0lswaud+ObbUtFIo4CApHMXdTB
jIC/nDSdFut2Yd32N8OH/QYnzAS1tarLGjk3x+Dg5nY3VEECQQDvM7GLXT2df85I
X+FBX9YiwUPXqciUJp3XdBOngsyENOFu0C3/cBTxvaiKkMXVPqMjOdoCAY+hz/k1
xPUVBpZ5AkEA25/Objru9LI1XSj8M1gJoIUpiR+mJysN7Q7wWbSK6DI+Hz95NQ5r
kAzG89lwMW3dLycH8VPGsWMuxjA7NG0QxQJBAIxDxdKxJFZdAXuTLaWGKy1KIxwt
pT6qvlf+6x+JJaBI2gB+9toYwU9YJaLLbhazmjonzFzsyWrbZ4lOK2De8hECQQCl
uJRgAQBGjCJQRZjodUnuYgzRd5w8efRsKJWcWutmAmN12MNxEYyAieOmJTDPW4NH
DUClDP4k5B5rVgGWsaWxAkA4m0bHwiPqO4/Yz6eyl2jYvljtmqr7KZFXrlsBUrIm
XXaTuMdsOmLlp/u078XFw0N+RaUWxbE6ATH7mTGjB2nV
-----END RSA PRIVATE KEY-----
公開鍵:
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNNorgFngK1zjHOnQlIUh5NjOx
ZIiEPZ8Knu6B/IyY0LBRToo1TZC7/nK6j8on/2sBdv5nFuTwlOpW9UL8C4yZJdjT
wYXn5X+wZZsz1RXNI5zjhSXuGeYzF7WhxusKo6zrR6b0IMNg2W016PWU3UkjOXxo
aIGkMN77oIorPP5bHQIDAQAB
-----END PUBLIC KEY-----
2. jsencrypt の概要
jsencryptはrsa暗号化・復号化をベースとしたjsライブラリであり、利用時にはインストールが必要です。
npm install jsencrypt
利用時に導入が必要
import JSEncrypt from 'jsencrypt'
3. 暗号化と復号化の方法
RSA暗号化:
var encryptor = new JSEncrypt() // 创建加密对象实例
//之前生成的公钥,复制的时候要小心不要有空格(此处把密钥省略了,自己写的时候可把自己生成的公钥粘到对应位置)
var pubKey = '-----BEGIN PUBLIC KEY-----MIGfMA0......AQAB-----END PUBLIC KEY-----'
encryptor.setPublicKey(pubKey)//设置公钥
var rsaPassWord = encryptor.encrypt('要加密的内容') // 对内容进行加密
RSA 復号化:
var decrypt = new JSEncrypt()//创建解密对象实例
//之前生成的秘钥(把自己生成的密钥钥粘到对应位置)
var priKey = '-----BEGIN RSA PRIVATE KEY-----MIICXAIBA......AKBgQC1QQWRk=-----END RSA PRIVATE KEY----'
decrypt.setPrivateKey(priKey)//设置秘钥
var uncrypted = decrypt.decrypt(encrypted)//解密之前拿公钥加密的内容
これで完了ですが、使用するときに小さな落とし穴があります。パスワードを渡すためにアドレス バーを使用します。暗号化後、いくつかの特殊な記号が表示されます。アドレス バーがパラメーターを渡すと、文字化けします。 URL エンコードとデコードを使用するには、UrlEncode エンコードと UrlDecode デコードを使用しますが、さまざまな方法がありますので、自分で選択できます。