傳參安全處理window.btoa base64加密,線性對(duì)稱加密
那么如何保證自己前端簡(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ù)查詢結(jié)果顯示不同信息內(nèi)容
info="數(shù)據(jù)生成失敗,請(qǐng)重新設(shè)置條件查詢"
this.setState((state)=>({visible: true,modalInfo:info}));
}
})
}console.log(window.btoa(values.carId))

這部分將是我們的加密參數(shù) 特別提醒 需要告知你的后端同學(xué)你的參數(shù)使用的是Base64加密了 不然他會(huì)生氣的~~
接下來(lái)我們介紹幾種稍微偏專業(yè)一些的知識(shí),介于本人學(xué)生時(shí)代學(xué)習(xí)過(guò)密碼學(xué)的基礎(chǔ)
首先亮出第一種簡(jiǎn)單的應(yīng)用
“對(duì)稱加密”: 看過(guò)抗日神劇的同學(xué)或者有所聽(tīng)聞的都知道,摩斯碼的解密需要一個(gè)密碼本,密碼工作者需要這密碼本來(lái)進(jìn)行解密。無(wú)論你傳輸?shù)亩嗝磸?fù)雜。規(guī)則的制定者始終都由這個(gè)密碼本的建立者掌握
這其實(shí)就是密碼學(xué)中基本的也是應(yīng)用最廣的可變性最大的‘對(duì)稱加密’
舉個(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)行的操作種類:"<<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)行的操作種類: ";
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ì)稱加密的文章就介紹到這了,更多相關(guān)window.btoa base64加密內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ESLint的簡(jiǎn)單使用方法(js,ts,vue)
ESLint是一個(gè)用于統(tǒng)一團(tuán)隊(duì)編碼規(guī)范、減少代碼錯(cuò)誤的工具,它可以手動(dòng)安裝并配置,支持JavaScript、TypeScript和Vue.js等語(yǔ)言,文章詳細(xì)介紹了如何手動(dòng)下載和配置ESLint,需要的朋友可以參考下2025-01-01
js實(shí)現(xiàn)開(kāi)關(guān)燈效果
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)開(kāi)關(guān)燈效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10
JS?解決Cannot?set?properties?of?undefined的問(wèn)題
遇到這樣問(wèn)題當(dāng)前的是當(dāng)前對(duì)象或者數(shù)組是undefined,但是卻用來(lái)引用屬性或者索引,遇到這樣的問(wèn)題如何解決呢,下面通過(guò)本文給大家介紹JS?如何解決Cannot?set?properties?of?undefined,需要的朋友可以參考下2024-01-01
JavaScript中的各種寬高屬性的實(shí)現(xiàn)
這篇文章主要介紹了JavaScript中的各種寬高屬性的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
Javascript的表單驗(yàn)證-揭開(kāi)正則表達(dá)式的面紗
Javascript的表單驗(yàn)證-揭開(kāi)正則表達(dá)式的面紗在本文重點(diǎn)介紹,感興趣的朋友一起學(xué)習(xí)吧2016-03-03

