A. 前端js 加密解密方式
一、base64加密
使用JS函數的window.btoa()和 window.atob(),分別是中臘編碼和解碼
二、編碼和解碼字元串
使用JS函巧羨數賣寬滑的escape()和unescape(),分別是編碼和解碼
三、AES加密解密
四、RSA加密解密
B. 前端網路高級篇(一)HTTPS
HTTP是Web中常見的通信方式,無狀態,簡單易用。當然,它的不足之處也非常明顯:
為了解決HTTP協議的痛點,採用通信加密的方式,繼而出現HTTPS協議。
HTTPS其實是有兩部分組成: HTTP + SSL / TLS ,也就是在HTTP上又加了一層處理加密信息的模塊。
服務端和客戶端的信息傳輸都會通過TLS進行加密,所以傳輸的數據都是加密後的數據。
加密技術有兩種:
https採用共享密鑰加密和公開密鑰加密兩者並用的混合加密機制 ,具體加密方式參考第二節。
SSL不僅提供加密處理,而且使用證書,來確定對方的非偽裝的。
證書是由值得信任的第三方機構頒發,用以證明伺服器和客戶端是實際存在的。
HTTP+加密+認證+完整性保護=HTTPS 。上節提到,「https採用共享密鑰加密和公開密鑰加密兩者並用的混合加密機制」,解釋一下,就是用公開密鑰加密 傳遞密鑰 ,用共享密鑰加密演算法 加密報文內容 。
為什麼HTTPS要採用混合加密呢?
因為公開密鑰加密的處理速度要遠遠慢於共享密鑰加密,所以,在通信最頻繁的環節 - 「報文加密」,採用了共享密鑰。那麼,更加安全的公開密鑰加密,就非常適合「報文密鑰」的傳遞來。
具體加密,解密,驗證步驟如下:
C. URL請求對參數前端JS加密,後台JAVA解密
數字的話可以使用 Base62 演算法,不過這只是表面的轉換,因為演算法是寫在Js里的,稍加分析就能知道怎麼去翻轉。
如果要有效加密的話,可以使用js調用RSA演算法進行加密,這樣js中只會暴露公鑰,可以實現安全的加密。
網上多得很。
D. 前端加密、解密數據
首先,為了更好的加密,我們不能用簡單的加密,因為很有可能會被輕松破解掉,我之前實現的加密只是簡單的把數據加密,在測試過程中(安全數伏性測試),通過一些技巧還是可以解密成功。
所以,對於一些重要的信息可能需要非對稱加密。
所謂的非對稱加密解密,在我的理解的,就是前端用一把鑰匙解密/加密,而後台用另一把鑰匙來做同樣的操作。
也就是,薯亂攜前端加密用特定的鑰匙,解密的鑰匙只在陪雀後端那裡。這樣在傳輸過程中就不會把鑰匙丟掉。
同樣,後端加密數據用一把鑰匙,解密的時候,前端自己有規定的鑰匙,這樣數據也不會在過程中解密截取。
1、我這里是用vue
所以,第一步 npm install jsencrypt
2、安裝完之後,開始定義一個專門用來加密解密的文件,我放到utils文件裡面。
引入JSEncrypt
3、重點來了加密解密
首先,我這里使用公鑰加密(由後台來給你公鑰)
全局引用,使用
這樣加密就完成了。
通常由後台加密,前端負責加密
由後台生成私鑰,然後前端用來解密。
引用和加密一樣
E. 前後端交互數據加解密
本文提供了一種前後端交互數據的加解密方法,主要涉及了AES和RSA兩種加密方式。
AES加密是一種對稱式加密,即加密和解密所需秘鑰是相同的。後端生成一組秘鑰,並利用該秘鑰加密數據,然後發給前端,同時也需要把秘鑰發送給前端,這樣前端才能解密。這樣就會有風險,一旦秘鑰被泄露,你的加密將不存在任何意義。同時,相比RSA加密來說,好處是不會限制加密字元串的長度。
RSA加密,是一種非對稱式加密,相比AES加密,這個就安全多了。後端生成一對秘鑰,自己拿著私鑰,公鑰可以公開。這樣前端拿公鑰進行加密,後端拿私鑰進行解密,私鑰掌握在自己手裡,被泄露的風險就小了很多。當然也有不好的地方,就是被加密字元串的長度不能過長,1024的秘鑰只能加密117位元組以內的明文,這就比較尷尬了,可能稍微長一點的數據就會超出了,當然可以通過2048或者4096的秘鑰來延長加密長度,但總會被超出。所以適合需要加密長度不長的數據,最好是已知長度的數據,這樣 就不會因長度問題報錯。
RSA+AES混合加密,即後端通過RSA演算法生成一對公私鑰,並把公鑰提供給前端。前端通過AES演算法生成密鑰,利用公鑰進行加密並送給後端,後端根據私鑰進行解密,得到與前端相同的AES密鑰。然後,前後端就可以利用AES密鑰對稱加密進行數據交互。
詳細步驟如圖所示。
RSA+AES混合加密,結合了兩種加密方式的優點。另外,前端每次啟動都會隨機生成AES密鑰,後端增加token失效機制(前端設置了定時任務請求token),增加了前後端數據交互的安全性。
https://www.cnblogs.com/huanzi-qch/p/10913636.html
https://blog.csdn.net/weixin_38342534/article/details/94582656
F. 前端加密與後端解密
請看demo, 用前請npm install crypto-js
創建一個js文件
import CryptoJS from 'crypto-js';
const encryptByDES = (message, key)=>{
let keyHex = CryptoJS.enc.Utf8.parse(key);
let encrypted = CryptoJS.DES.encrypt(message, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.ZeroPadding
});
return encrypted.ciphertext.toString();
}
/**
* 對userId加密
激伏世* @param {String} userId
*/
export const encryption = (userId) => {
let _userId = userId.toString() || ''
let encryptedResult = encryptByDES(_userId, '')
return encryptedResult
}
html部分
import React, 明肢{Component} from 'react';
import CryptoJS from 'crypto-js';
import logo from './logo.svg';
import './App.css';
class App extends Component {
constructor(props){
super(props)
this.state={
userId: 123,
encryptedResult: ''
}
}
_handleChange = (event) => {
this.setState(() => ({
userId: event.target.value
}))
}
des = () => {
let data = this.encryptByDES('111', '')
this.setState(() => ({
encryptedResult: data
}))
}
encryptByDES = (message, key) => {
console.log(CryptoJS.pad)
let keyHex = CryptoJS.enc.Utf8.parse(key);
let encrypted = CryptoJS.DES.encrypt(message, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.ZeroPadding
});
return encrypted.ciphertext.toString();
}
render() {
return (
<div className="App">
廳慶 <input type="text" value={this.state.userId} onChange={this._handleChange}/>
<button type="button" onClick={this.des}>加密</button><br/>
<span>結果:{this.state.encryptedResult}</span>
</div>
);
}
}
export default App;
G. web前端的數據如何加密
前端數據一般都需要在後台使用的所以必須要用可逆的加密方式 現在比較流行的就是非對稱的加密方式比如RSA 具體方法是生成兩個秘鑰 公鑰 私鑰 前端使用js(可以網路下載)把數據利用公鑰進行加密 加密結果傳給後端 後端利用私鑰解密方法對數據進行解密