傳參安全處理window.btoa base64加密,線性對(duì)稱(chēng)加密
那么如何保證自己前端簡(jiǎn)單又便捷的生成加密參數(shù)呢
1.我們可以使用window.btoa() window對(duì)象自帶的一個(gè)base64加密規(guī)則實(shí)現(xiàn) 前提參數(shù)需要時(shí)獨(dú)立的string。 解密方式 是將加密后的文本使用window.atob(Str) 注意Str: 必需是一個(gè)通過(guò) btoa() 方法編碼的字符串。
代碼中我們可以這樣使用
/* * 根據(jù)條件查找 * @params{} * */ searchTemplate=()=>{ let info="" this.props.form.validateFields((err, values) => { if(!err){ console.log(window.btoa(values.carId)) let data={ carId:window.btoa(values.carId), data:values.data, timeRange:[moment(values.timeRange[0]).format('YYYY-MM-DD HH:mm:ss'), moment(values.timeRange[1]).format('YYYY-MM-DD HH:mm:ss')] } console.log("getData",data) //根據(jù)查詢(xún)結(jié)果顯示不同信息內(nèi)容 info="數(shù)據(jù)生成失敗,請(qǐng)重新設(shè)置條件查詢(xún)" this.setState((state)=>({visible: true,modalInfo:info})); } }) }
console.log(window.btoa(values.carId))
這部分將是我們的加密參數(shù) 特別提醒 需要告知你的后端同學(xué)你的參數(shù)使用的是Base64加密了 不然他會(huì)生氣的~~
接下來(lái)我們介紹幾種稍微偏專(zhuān)業(yè)一些的知識(shí),介于本人學(xué)生時(shí)代學(xué)習(xí)過(guò)密碼學(xué)的基礎(chǔ)
首先亮出第一種簡(jiǎn)單的應(yīng)用
“對(duì)稱(chēng)加密”: 看過(guò)抗日神劇的同學(xué)或者有所聽(tīng)聞的都知道,摩斯碼的解密需要一個(gè)密碼本,密碼工作者需要這密碼本來(lái)進(jìn)行解密。無(wú)論你傳輸?shù)亩嗝磸?fù)雜。規(guī)則的制定者始終都由這個(gè)密碼本的建立者掌握
這其實(shí)就是密碼學(xué)中基本的也是應(yīng)用最廣的可變性最大的‘對(duì)稱(chēng)加密’
舉個(gè)例子我想傳輸?shù)氖敲魑?lsquo;3, 4,5’ 我的秘鑰規(guī)定是‘+2’ 那么規(guī)則下我實(shí)際傳輸?shù)拿芪?lsquo;1, 2,3’ 。當(dāng)接收者知道我的秘鑰后我就可以知道其實(shí)他說(shuō)的是‘3,4,5’
升級(jí)版本來(lái)了
1.替代密碼
密鑰字符(僅支持單個(gè)字符密鑰)的ASCII碼值范圍為[32,126](可見(jiàn)、可輸入字符),加密運(yùn)算利用密鑰字符的ASCII碼值進(jìn)行加密,產(chǎn)生的每個(gè)密文字符ASCII碼值也在[32,126]之內(nèi);解密運(yùn)算利用密鑰字符的ASCII碼值進(jìn)行解密,產(chǎn)生的每個(gè)明文字符ASCII碼值也在[32,126]之內(nèi);
#include<iostream> using namespace std; void jiami(); void jiemi(); char a[100]; char b[100]; char k; void jiami() { int i=0; cout<<"明文: "; cin>>a; cout<<"請(qǐng)輸入密鑰:"; cin>>k; while(a[i]!='\0') { b[i]=(char)((a[i]+k)>126?(a[i]+k)%126+31:(a[i]+k)); i++; } i=0; cout<<"密文為:"; while(b[i]!='\0') { cout<<b[i]; i++; } cout<<endl; } void jiemi() { int i=0; cout<<"請(qǐng)輸入密文: "; cin>>a; cout<<"請(qǐng)輸入密鑰: "; cin>>k; while(a[i]!='\0') { b[i]=(char)((a[i]-k)<32?126-abs((31-(a[i]-k))):(a[i]-k)); i++; } i=0; cout<<"明文為:"; while(b[i]!='\0') { cout<<b[i]; i++; } cout<<endl; } void main() { int choose; while(true) { cout<<"請(qǐng)選擇需要進(jìn)行的操作種類(lèi):"<<endl; cout<<"1:加密 2:解密 3:退出 "<<endl; cin>>choose; if(choose==1) { jiami(); } else if(choose==2) { jiemi(); } else if(choose==3) { break; } else { cout<<"您輸入的序號(hào)不正確,請(qǐng)重新輸入"<<endl; } cout<<endl; } }
2.置換密碼
1)算法描述: (加密置換矩陣、逆置換矩陣不同)
#include<iostream> using namespace std; int jiamibox[6]={3,4,5,2,6,1}; //加密置換矩陣 int jiemibox[6]={6,4,1,2,3,5}; //逆置換矩陣 char in[5000]; //定義明文字符串變量 char out[5000]; //定義密文字符串變量 char ch; void jiami(); // 加密函數(shù) void jiemi(); //解密函數(shù) void jiami() { cout<<"輸入要加密的明文:"; cin>>in; for(int i=0;i<strlen(in)/6;i++) { for(int j=0;j<6;j++) { out[i*6+j]=in[i*6+(jiamibox[j]-1)]; } } char Out[5000]; for(int j=0;j<6;j++) { for(int i=0;i<strlen(in)/6;i++) { Out[i*6+j]=out[i*6+(jiamibox[j]-1)]; } } cout<<"加密后的密文為:"; for(int i=0;i<5000;i++) { if(in[i]!='\0') cout<<Out[i]; else break; } cout<<endl; } void jiemi() { cout<<"輸入要解密的密文:"; cin>>in; for(int i=0;i<strlen(in)/6;i++) { for(int j=0;j<6;j++) { out[i*6+j]=in[i*6+(jiemibox[j]-1)]; } } char Out[5000]; for(int j=0;j<6;j++) { for(int i=0;i<strlen(in)/6;i++) { Out[i*6+j]=out[i*6+(jiemibox[j]-1)]; } } cout<<"解密后的明文為:"; for(int i=0;i<5000;i++) { if(in[i]!='\0') cout<<Out[i]; else break; } cout<<endl; } void main() { int choose; while(true) { cout<<"1:加密 2:解密3:退出(輸入字符數(shù)必須是6的正整數(shù)倍)"<<endl; cout<<"請(qǐng)選擇需要進(jìn)行的操作種類(lèi): "; cin>>choose; cout<<endl; if(choose==1) jiami(); elseif(choose==2) jiemi(); elseif(choose==3) break; else cout<<"您輸入的序號(hào)不正確,請(qǐng)重新輸入"; cout<<endl; } }
后兩種僅供提升參考,使用c++ 也可轉(zhuǎn)javaScript 推薦前兩種方案前端使用
到此這篇關(guān)于傳參安全處理window.btoa base64加密,線性對(duì)稱(chēng)加密的文章就介紹到這了,更多相關(guān)window.btoa base64加密內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
修改源碼來(lái)解決el-select值不匹配導(dǎo)致回顯id的問(wèn)題
el-select數(shù)據(jù)的回顯是根據(jù)id去匹配值的,最近項(xiàng)目出現(xiàn)了回顯id的情況,一查是沒(méi)有匹配數(shù)據(jù)的問(wèn)題,于是就想怎么處理(針對(duì)單選的情況),本文小編給大家介紹了用修改源碼來(lái)解決el-select值不匹配導(dǎo)致回顯id的問(wèn)題,需要的朋友可以參考下2024-09-09微信小程序 頁(yè)面跳轉(zhuǎn)傳值實(shí)現(xiàn)代碼
這篇文章主要介紹了微信小程序 頁(yè)面跳轉(zhuǎn)傳值實(shí)現(xiàn)代碼的相關(guān)資料,這里分析實(shí)現(xiàn)的條件及實(shí)例代碼,需要的朋友可以參考下2017-07-07JavaScript+HTML5實(shí)現(xiàn)的日期比較功能示例
這篇文章主要介紹了JavaScript+HTML5實(shí)現(xiàn)的日期比較功能,涉及javascript結(jié)合HTML5針對(duì)日期的轉(zhuǎn)換與運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2017-07-07undefined==null引發(fā)的兩者區(qū)別與聯(lián)系
undefined==null引發(fā)的兩者區(qū)別與聯(lián)系2007-12-12H5基于iScroll實(shí)現(xiàn)下拉刷新和上拉加載更多
這篇文章主要為大家詳細(xì)介紹了H5基于iScroll實(shí)現(xiàn)下拉刷新和上拉加載更多效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07