目錄前言
一、後端準備工作及**實現
1.1、三方庫安裝
1.2、公鑰和私鑰生成
二、前端準備工作及**
2.1、前端依賴安裝
2.2、前端對內容進行加密
三、後端對密文進行解密
3.1、**
3.2、結果驗證
四、參考資料
最近遇到乙個需求:網上很多資料都是說用rsa或crypto,試了一下,都不適用於我的前後端環境場景,理由:1、前端登入時密碼密文傳輸到後台。
2、後台使用者表密碼落庫加密演算法為bcrypt。
當時想著前端和後端統一用bcrypt加密好了,但事後發現後端無法對前端傳過來用bcrypt生成的密文串與資料庫中儲存密碼進行校驗。原因:1、bcrypt對同一內容每次加密生成密文串都不相同,所以肯定無法直接比對結果。2、bcrypt不可逆,即不可反向破解生成明文。
後面想到曲線解決方式:前端傳過來密文串就行了,後端再解密得到密碼明文,再將密碼明文拿來和庫中bcrypt加密的密文進行校驗。
前端加密方法很多,簡單點的字串加鹽混淆。本文講rsa非對稱加密解密演算法在該場景下的應用。
前後端環境:
前端:vue
後端:python
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...