前端JS,後端python實現RSA加密解密

2021-10-10 11:41:36 字數 3162 閱讀 9337

目錄前言

一、後端準備工作及**實現

1.1、三方庫安裝

1.2、公鑰和私鑰生成

二、前端準備工作及**

2.1、前端依賴安裝

2.2、前端對內容進行加密

三、後端對密文進行解密

3.1、**

3.2、結果驗證

四、參考資料

最近遇到乙個需求:

1、前端登入時密碼密文傳輸到後台。

2、後台使用者表密碼落庫加密演算法為bcrypt。

當時想著前端和後端統一用bcrypt加密好了,但事後發現後端無法對前端傳過來用bcrypt生成的密文串與資料庫中儲存密碼進行校驗。原因:1、bcrypt對同一內容每次加密生成密文串都不相同,所以肯定無法直接比對結果。2、bcrypt不可逆,即不可反向破解生成明文。

後面想到曲線解決方式:前端傳過來密文串就行了,後端再解密得到密碼明文,再將密碼明文拿來和庫中bcrypt加密的密文進行校驗。

前端加密方法很多,簡單點的字串加鹽混淆。本文講rsa非對稱加密解密演算法在該場景下的應用。

前後端環境:

前端:vue

後端:python

網上很多資料都是說用rsa或crypto,試了一下,都不適用於我的前後端環境場景,理由:

1、rsa生成的公鑰,前端對內容加密時一直返回false,加密不成功。

2、crypto庫匯入時有一些問題,後面找到了pycryptodome庫可以解決問題就沒深究了。

crypto這個模組的安裝比較特殊,可能會有點小坑,安裝時需要注意。

crypto,pycrypto,pycryptodome的功能是一樣的。crypto與pycrypto已經沒有維護了,後面可以使用pycryptodome。

但是,三個名字,再分linux和windows作業系統,再分python2和python3,疊加起來就有12種情況了,非常複雜。

在 windows 中,不管是 python2 和 python3 ,都不能用 crypto 和 pycrypto ,可以用 pycryptodome 。

在 linux 中,不管是 python2 和 python3 ,都不能用 crypto ,可以用 pycrypto 和 pycryptodome 。

所以,總結一句話,直接都用 pycryptodome 就行了。

安裝之前,最好先把 crypto 和 pycrypto 解除安裝了(uninstall),避免不必要的麻煩。

pip install pycryptodome
# a.py

from crypto import random

from crypto.publickey import rsa

random_generator = random.new().read

rsa = rsa.generate(1024, random_generator)

# 生成私鑰

private_key = rsa.exportkey()

with open('private.pem', 'w') as f:

f.write(private_key.decode('utf-8'))

# 生成公鑰

public_key = rsa.publickey().exportkey()

with open('public.pem', 'w') as f:

f.write(public_key.decode('utf-8'))

npm install jsencrypt
注意:此處公鑰是後端伺服器生成的,public.pem中公鑰分為了多行,我在js中處理成了一行。

/** * 對content進行rsa加密

* @param } content

*/export const rsaencrypt = content =>

# b.py

import base64

from crypto import random

from crypto.cipher import pkcs1_v1_5 as cipher_pkcs1_v1_5

from crypto.publickey import rsa

rsa_private_key = ''

with open('private.pem', 'r') as f:

rsa_private_key = f.read()

# 前端加密後的密文串

cipher_text = 'okxl9flsi4hdjq22g5d5k4kwas/y8ij8/iqobdhpxym03aucpbzumtmc+6lrfdntt+lwzbxlplo1nleulyhmpsk1tgxiocxa7wdtbeowe7r4s6l/81ihhk6c2g2+fgdvnwu3qzn25idou/qgpulruo14xkgpd72cop/aff4w5pi='

rsakey = rsa.importkey(rsa_private_key) # 匯入私鑰

cipher = cipher_pkcs1_v1_5.new(rsakey)

random_generator = random.new().read

text = cipher.decrypt(base64.b64decode(cipher_text), none)

print(text.decode('utf8'))

前端加密:

後端解密:

rsa演算法原理-阮一峰

python crypto模組實現rsa和aes加密解密

後端 n實現前端換行

後端傳入兩個 的n在前端會被解析成 n,前端實現換行方式 將 n替換成 n。用pre標籤輸出 將v html輸出 bz style white space pre line white space值 描述normal 預設 空白會被瀏覽器忽略。pre空白會被瀏覽器保留。其行為方式類似 html 中的...

js分頁實現,前端實現。

主要是借鑑了網上乙個例子,自己重新加了樣式,新增了跳轉,修改了一些小地方,用於和大家一起分享,前端分頁的技巧,的資料是我已經寫好了,其實大家也可以前端渲染 然後再分頁,都是可以的。其實分頁最關鍵是這兩句 var startrow currentpage 1 pagesize 1 currentpag...

js分頁實現,前端實現

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!主要是借鑑了網上乙個例子,自己重新加了樣式,新增了跳轉,修改了一些小地方,用於和大家一起分享,前端分頁的技巧,的資料是我已經寫好了,其實大家也可以前端渲染 然後再分頁,都是可以的。其實分頁最關鍵是這兩句 var startrow currentpa...