當前位置:首頁 » 網頁前端 » 前端請求報文加密
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

前端請求報文加密

發布時間: 2023-07-09 21:01:27

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(可以網路下載)把數據利用公鑰進行加密 加密結果傳給後端 後端利用私鑰解密方法對數據進行解密