RSA的前端與node層應用

2021-08-26 09:31:30 字數 1999 閱讀 7099

由於前幾天有朋友問我rsa的使用方式,便花了一些時間去看了一下文件自己做了一下前端和node端

由來:由於表單提交的資料用f12或其他抓包工具可以看的一清二楚,所以前端在處理表單提交的時候會要求使用rsa/md5等類似的加密工具加資料加密後再上傳

用到的類庫: node-rsa

非對稱性加密

加密、解密分別需要不同的秘方

你有兩把鑰匙,你給了我一把鑰匙和乙個帶鎖的箱子,我把資料放進箱子交給你,你用另一把鑰匙開啟鎖開啟箱子拿到資料

你給我的鑰匙和你自己保留的鑰匙不一致,開箱子必須用你那把鑰匙,不同key,非對稱性加密

前端**(非對稱性加密)

實現邏輯

我們來看**

import nodersa from 'node-rsa'

...// vue提交表單

submitform(formname) )

.catch(err => );

}// 對資料進行加密,並獲得加密後的資料

const entryptdata =  this.entryptdata(this.models)

// 拿到加密後的資料呼叫登入介面

await rsalogin(

entryptdata,

).then(res => )

// ... do something

}).catch(err => )

} else

});},

entryptdata(props) )

// 匯入公鑰

rsakey.importkey(this.publickey)

console.log('資料物件加密前:', props)

const afterencrypt = object.keys(props).reduce((init, key) => , {})

console.log('資料物件加密後:', afterencrypt)

return afterencrypt

},

到這裡,我們就加密好了資料

node實現

實現邏輯

const pojo = require('../../helper/pojo')

const = pojo

const nodersa = require('node-rsa')

let mykey = ;

const initkey = () => ); // 生成新的512位長度金鑰

​  // 如果被初始化過就是解密需要的步驟

if (mykey.isinit)

​  // 新生成的物件,保留公鑰和私鑰

const publicder = key.exportkey('public'); // 公鑰

const privateder = key.exportkey('private'); // 私鑰

mykey = }​

// 獲取公鑰的介面

const getkey = async ctx =>

// 返回publickey給前端

res = success(mykey.publickey)

ctx.body = res

} catch (err) }​

// 登入介面

const login = async ctx =>

} else , {})

// 呼叫真正的登入介面

// do something

}ctx.body = res

} catch (err) ​}

module.exports =

完整的**和專案在這裡:前端、node端

node應用授權 RSA非對稱加密授權

安裝依賴包 npm i node rsa生成rsa公私鑰對 const nodersa require node rsa function createkey 生成512位金鑰 const re begin end s s skey n r g 這裡對格式進行正則處理方便存表,也可以不處理選擇其他方...

資料層與應用層分離

比如將資料庫查詢打包到乙個cdatabase類中,把查詢到的資料顯示到乙個列表控制項時,只要呼叫cdatabase類的乙個成員函式cdatabase initlistctrl clistctrl 在呼叫時,將目標的列表控制項的指標作為引數提供,在cdatabase initlistctrl clis...

網路層協議與應用

1.ip資料報格式 版本 ipv4 首部長度 ip包頭部長度,因為長度可變,因此需要定義 優先順序與服務型別 提供三層的qos 總長度 ip資料總長度 識別符號,標誌,段偏移量 上層來的資料到ip層被分片,這幾個字段用來對資料報進行標識,使資料到達目的端重組的時候,不會亂序.ttl 為了防止乙個資料...