欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python/JS實(shí)現(xiàn)常見加密算法的示例代碼

 更新時間:2022年11月02日 10:22:22   作者:EXI-小洲  
這篇文章主要為大家詳細(xì)介紹了常見的一些JS加密,并記錄了JS和Python的實(shí)現(xiàn)方式,主要有base64編碼偽加密、MD5、SHAI等,需要的可以參考一下

前言

本文僅僅介紹了常見的一些JS加密,并記錄了JS和Python的實(shí)現(xiàn)方式

常見的加密算法基本分為這幾類:

(1)base64編碼偽加密

(2)線性散列算法(簽名算法)MD5

(3)安全哈希算法 SHAI

(4)散列消息鑒別碼 HMAC

(5)對稱性加密算法 AES,DES

(6)非對稱性加密算法 RSA

提示:以下是本篇文章正文內(nèi)容,下面案例可供參考

一、編碼,加密

1. 什么是編碼?

編碼是信息從一種形式或格式轉(zhuǎn)換為另一種形式的過程,也稱為計算機(jī)編程語言的代碼簡稱編碼;

2. 什么是加密?

加密,是以某種特殊的算法改變原有的信息數(shù)據(jù),使得未授權(quán)的用戶即使獲得了已加密的信息,但因不知解密的方法,仍然無法了解信息的內(nèi)容。

二、常見編碼

1.Base64

base64是基于64個可打印ascii字符對任意字節(jié)數(shù)據(jù)進(jìn)行編碼算法,base64是一種編碼方式而不是加密算法。只是看上去像是加密而已;
Base64使用A–Z,a–z,0–9,+,/ 這64個字符實(shí)現(xiàn)對數(shù)據(jù)進(jìn)行加密。

2. Base64 - JS實(shí)現(xiàn)

<html>
    <script type="text/javascript">
        // 創(chuàng)建Base64對象
        var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e){var t="";var n,r,i,s,o,u,a;var f=0;e=Base64._utf8_encode(e);while(f<e.length){n=e.charCodeAt(f++);r=e.charCodeAt(f++);i=e.charCodeAt(f++);s=n>>2;o=(n&3)<<4|r>>4;u=(r&15)<<2|i>>6;a=i&63;if(isNaN(r)){u=a=64}else if(isNaN(i)){a=64}t=t+this._keyStr.charAt(s)+this._keyStr.charAt(o)+this._keyStr.charAt(u)+this._keyStr.charAt(a)}return t},decode:function(e){var t="";var n,r,i;var s,o,u,a;var f=0;e=e.replace(/[^A-Za-z0-9+/=]/g,"");while(f<e.length){s=this._keyStr.indexOf(e.charAt(f++));o=this._keyStr.indexOf(e.charAt(f++));u=this._keyStr.indexOf(e.charAt(f++));a=this._keyStr.indexOf(e.charAt(f++));n=s<<2|o>>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){t=t+String.fromCharCode(r)}if(a!=64){t=t+String.fromCharCode(i)}}t=Base64._utf8_decode(t);return t},_utf8_encode:function(e){e=e.replace(/rn/g,"n");var t="";for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r)}else if(r>127&&r<2048){t+=String.fromCharCode(r>>6|192);t+=String.fromCharCode(r&63|128)}else{t+=String.fromCharCode(r>>12|224);t+=String.fromCharCode(r>>6&63|128);t+=String.fromCharCode(r&63|128)}}return t},_utf8_decode:function(e){var t="";var n=0;var r=c1=c2=0;while(n<e.length){r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r);n++}else if(r>191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3}}return t}}
        // 定義字符串
        var string = 'i am xz!';
        // 加密
        var encodedString = Base64.encode(string);
        alert(encodedString);
        // 解密
        var decodedString = Base64.decode(encodedString);
        alert(decodedString);
	</script>
</html>            

3. Base64 - Python實(shí)現(xiàn)

import base64
str1 = 'i am xz'
str_encode = base64.b64encode(str1.encode()) 
print("Base64編碼:", str_encode) 
str_decode = base64.b64decode(str_encode) 
print("Base64解碼:", str_decode) 

4.Unicode

Unicode是計算機(jī)中字符集,編碼的一項(xiàng)業(yè)界標(biāo)準(zhǔn),被稱為統(tǒng)一碼,萬國碼,表現(xiàn)形式一般以"\u"或"&#"開頭;

5.Urlencode

urlencode是URL編碼,也稱作百分號編碼,用于把url的符號進(jìn)行轉(zhuǎn)換;

三、線性散列算法(簽名算法)MD5

1.MD5介紹

MD5是一種被廣泛使用的線性散列算法,可以產(chǎn)生出一個128位(16字節(jié))的散列值(hash value)。

特征:MD5加密之后產(chǎn)生的是一個固定長度(32位或16位)的數(shù)據(jù),常規(guī)講MD5是不存在解密的。

使用場景:注冊賬號時的密碼一般都是用的MD5加密。

2. MD5 - JS實(shí)現(xiàn)

<!DOCTYPE html>
<html lang="en">
    <!-- md5源碼地址:https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.js -->
    <!-- md5常用于登錄-->
    <script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.js"></script>
    <script type="text/javascript">
        var str1 = 'i am xz'
        var str_encode = md5(str1);
        alert(str_encode) // 在彈窗中輸出文本 f0404c7b9bff0bde8d6df8b64759960f
    </script>
</html>  

3. MD5 - Python實(shí)現(xiàn)

import hashlib
str1 = 'i am xz'
m = hashlib.md5() 
m.update(str1.encode('utf-8'))
str_encode = m.hexdigest() 
print("MD5加密:", str_encode)  # MD5加密: f0404c7b9bff0bde8d6df8b64759960f

四、安全哈希算法 SHAI

1. SHAI - JS實(shí)現(xiàn)

<!DOCTYPE html>
    <script src="https://cdn.bootcss.com/crypto-js/3.1.9-1/crypto-js.js"></script>
    <script>
        var str1 = 'i am xz';
        var str_encode = CryptoJS.SHA1(str1).toString(); // 注意:1是數(shù)字1
        alert(str_encode)  // 0e9f44d42516562396d7b8923542a6a4fc29cd5c
    </script>
</html>

2. SHAI - Python實(shí)現(xiàn)

import hashlib
sha1 = hashlib.sha1() 
str1 = 'i am xz'
sha1.update(str1.encode()) 
str_encode = sha1.hexdigest() 
print("SHAI加密:", str_encode)  # SHAI加密: 0e9f44d42516562396d7b8923542a6a4fc29cd5c

五、散列消息鑒別碼 HMAC

1.HMAC - JS實(shí)現(xiàn)

<!DOCTYPE html>
    <script src="https://cdn.bootcss.com/crypto-js/3.1.9-1/crypto-js.js"></script>
    <script>
        var key = 'key';
        var str1 = 'i am xz';
        var hash = CryptoJS.HmacSHA256(key, str1);
        var str_encode = CryptoJS.enc.Hex.stringify(hash);
        alert(str_encode)  // '11a7960cd583ee2c3f1ed910dbc3b6c3991207cbc527d122f69e84d13cc5ce5c'
    </script>
</html>  

2. HMAC - Python實(shí)現(xiàn)

import hmac
import hashlib
key = 'key'
str1 = 'i am xz'
mac = hmac.new(key=key.encode(), msg=str1.encode(), digestmod=hashlib.sha256) 
mac.digest() 
str_encode = mac.hexdigest()                                                                               print("HMAC加密:", str_encode)  # HMAC加密: e5137adac855050a62c7434b01bb97229f9e1a8fd5b45364e4035d28885b0852

六、對稱加密 AES、DES

1. AES,DES介紹

AES和DES的區(qū)別:加密后密文長度的不同,DES加密后密文長度是8的整數(shù)倍,AES加密后密文長度是16的整數(shù)倍;

特征:對稱加密特征,加密和解密需要相同的密鑰DES;

應(yīng)用場景:企業(yè)級開發(fā)使用DES足夠安全,要求高使用AES;

2. AES - JS實(shí)現(xiàn)

<html>
	<script src="https://cdn.bootcss.com/crypto-js/3.1.9-1/crypto-js.js"></script>
    <script type="text/javascript">
		  var aseKey = "12345678"     // 定制秘鑰,長度必須為:8/16/32位, 長度不一致也沒問題
		  var message = "i am xz";  // 需要加密的內(nèi)容
		  // 加密 DES/AES切換只需要修改 CryptoJS.AES <=> CryptoJS.DES
		  var encrypt = CryptoJS.AES.encrypt(message, CryptoJS.enc.Utf8.parse(aseKey),  // 參數(shù)1=密鑰, 參數(shù)2=加密內(nèi)容
              {
			    mode: CryptoJS.mode.ECB, // 為DES的工作方式
			    padding: CryptoJS.pad.Pkcs7  // 當(dāng)加密后密文長度達(dá)不到指定整數(shù)倍(8個字節(jié)、16個字節(jié))則填充對應(yīng)字符
		     }
          ).toString(); // toString=轉(zhuǎn)字符串類型

		  alert(encrypt); // 在彈窗中打印字符串 2vcsEDJv9vAZZLgFLjkZ9A==

		  //解密
		  var decrypt = CryptoJS.AES.decrypt(encrypt, CryptoJS.enc.Utf8.parse(aseKey), // 參數(shù)1=密鑰, 參數(shù)2=解密內(nèi)容
              {
                mode: CryptoJS.mode.ECB,
                padding: CryptoJS.pad.Pkcs7
              }
          ).toString(CryptoJS.enc.Utf8); // toString=轉(zhuǎn)字符串類型,并指定編碼
		  alert(decrypt); // "i am xz"
	</script>
</html>

3. DES - JS實(shí)現(xiàn)

<html>
	 <!-- 對稱加密特征,加密和解密需要相同的密鑰DES,AES-->
	<script src="https://cdn.bootcss.com/crypto-js/3.1.9-1/crypto-js.js"></script>
    <script type="text/javascript">
		  var aseKey = "12345678"     // 定制秘鑰,長度必須為:8/16/32位, 長度不一致也沒問題
		  var message = "i am xiaozhou ?";  // 需要加密的內(nèi)容
		  // 加密 DES/AES切換只需要修改 CryptoJS.AES <=> CryptoJS.DES
		  var encrypt = CryptoJS.DES.encrypt(message, CryptoJS.enc.Utf8.parse(aseKey),  // 參數(shù)1=密鑰, 參數(shù)2=加密內(nèi)容
              {
			    mode: CryptoJS.mode.ECB, // 為DES的工作方式
			    padding: CryptoJS.pad.Pkcs7  // 當(dāng)加密后密文長度達(dá)不到指定整數(shù)倍(8個字節(jié)、16個字節(jié))則填充對應(yīng)字符
		     }
          ).toString(); // toString=轉(zhuǎn)字符串類型

		  alert(encrypt); // 控制臺打印 CDVNwmEwDRM

		  //解密
		  var decrypt = CryptoJS.DES.decrypt(encrypt, CryptoJS.enc.Utf8.parse(aseKey), // 參數(shù)1=密鑰, 參數(shù)2=解密內(nèi)容
              {
                mode: CryptoJS.mode.ECB,
                padding: CryptoJS.pad.Pkcs7
              }
          ).toString(CryptoJS.enc.Utf8); // toString=轉(zhuǎn)字符串類型,并指定編碼
		  alert(decrypt); // 控制臺打印 "i am xiaozhou ?"
	</script>
</html>

4. DES - Python實(shí)現(xiàn)

pip 安裝: pip intall pyDes -i https://pypi.tuna.tsinghua.edu.cn/simple

import binascii
from pyDes import des, CBC, PAD_PKCS5
deskey = '12345678'
message = 'i am xz'
des_encrypt = des(key=deskey, mode=CBC, IV=deskey, padmode=PAD_PKCS5)
str_encode = binascii.b2a_hex(des_encrypt.encrypt(message, padmode=PAD_PKCS5))  # .decode('utf-8')
print("DES加密:", str_encode)  # DES加密: b'b8a5ac525c77aad0'
str_decrypt = des(key=deskey, mode=CBC, IV=deskey, padmode=PAD_PKCS5)
str_decode = str_decrypt.decrypt(binascii.a2b_hex(str_encode), padmode=PAD_PKCS5)
print("DES解密:", str_decode)  # DES解密: b'i am xz'                                                                                                                                                                                                                                                                               

七、非對稱加密RSA

1. RSA介紹

特征:加密使用公鑰,解密使用私鑰,公鑰(可以公開暴露出來只能加密),私鑰(必須隱藏),成對出現(xiàn), 私匙是通過公匙計算生成的,不能盲目隨機(jī)生成,可根據(jù)setPublicKey,setPrivateKey 確定是否為非對稱RSA加密;

公私匙在線生成:http://web.chacuo.net/netrsakeypair

應(yīng)用場景:公開密鑰加密和電子商業(yè)中RSA被廣泛使用,支付密碼會通過RSA加密;

2. JS-代碼示例

<html>
    <!-- 公私匙可以在線生成:http://web.chacuo.net/netrsakeypair -->
    <!-- 非對稱加密特征,加密使用公鑰和解密使用私鑰,公鑰(可以公開暴露出來,只能加密)和私鑰(必須隱藏)成對出現(xiàn),公鑰和私鑰有著某種聯(lián)系 RSA -->
	<script src="https://cdn.bootcss.com/jsencrypt/3.0.0-beta.1/jsencrypt.js"></script>
    <script type="text/javascript">
        // 公鑰 私匙是通過公匙計算生成的,不能盲目設(shè)置
        var PUBLIC_KEY = '-----BEGIN PUBLIC KEY-----MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALyBJ6kZ/VFJYTV3vOC07jqWIqgyvHulv6us/8wzlSBqQ2+eOTX7s5zKfXY40yZWDoCaIGk+tP/sc0D6dQzjaxECAwEAAQ==-----END PUBLIC KEY-----';
        //私鑰
		var PRIVATE_KEY = '-----BEGIN PRIVATE KEY-----MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEAvIEnqRn9UUlhNXe84LTuOpYiqDK8e6W/q6z/zDOVIGpDb545NfuznMp9djjTJlYOgJogaT60/+xzQPp1DONrEQIDAQABAkEAu7DFsqQEDDnKJpiwYfUE9ySiIWNTNLJWZDN/Bu2dYIV4DO2A5aHZfMe48rga5BkoWq2LALlY3tqsOFTe3M6yoQIhAOSfSAU3H6jIOnlEiZabUrVGqiFLCb5Ut3Jz9NN+5p59AiEA0xQDMrxWBBJ9BYq6RRY4pXwa/MthX/8Hy+3GnvNw/yUCIG/3Ee578KVYakq5pih8KSVeVjO37C2qj60d3Ok3XPqBAiEAqGPvxTsAuBDz0kcBIPqASGzArumljkrLsoHHkakOfU0CIDuhxKQwHlXFDO79ppYAPcVO3bph672qGD84YUaHF+pQ-----END PRIVATE KEY-----';
		//使用公鑰加密
        var encrypt = new JSEncrypt();//實(shí)例化加密對象
        encrypt.setPublicKey(PUBLIC_KEY);//設(shè)置公鑰
        var message = 'hello xiaozhou!' // 需要加密的數(shù)據(jù) 
        var encrypted = encrypt.encrypt(message);//對指定數(shù)據(jù)進(jìn)行加密
		alert(encrypted)  // 'JQ83h8tmJpsSZcb4BJ3eQvuqIAs3ejepcUUnoFhQEvum8fA8bf1Y/fG+DO1bSIVNJF6EOZKe4wa0njv6aOar9w=='
        //使用私鑰解密
        var decrypt = new JSEncrypt(); // 創(chuàng)建解密對象
        decrypt.setPrivateKey(PRIVATE_KEY); //設(shè)置私鑰
        var uncrypted = decrypt.decrypt(encrypted); //解密 'hello xiaozhou!'
		alert(uncrypted);
    </script>
    <!-- 總結(jié):可根據(jù)setPublicKey,setPrivateKey 確定是否為非對稱RSA加密 -->
</html>

以上就是Python/JS實(shí)現(xiàn)常見加密算法的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于Python加密算法的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python+Kepler.gl輕松制作酷炫路徑動畫的實(shí)現(xiàn)示例

    Python+Kepler.gl輕松制作酷炫路徑動畫的實(shí)現(xiàn)示例

    這篇文章主要介紹了Python+Kepler.gl輕松制作酷炫路徑動畫的實(shí),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧現(xiàn)示例
    2020-06-06
  • Python read函數(shù)按字節(jié)(字符)讀取文件的實(shí)現(xiàn)

    Python read函數(shù)按字節(jié)(字符)讀取文件的實(shí)現(xiàn)

    這篇文章主要介紹了Python read函數(shù)按字節(jié)(字符)讀取文件的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Django處理枚舉(枚舉模型)及source的使用

    Django處理枚舉(枚舉模型)及source的使用

    本文主要介紹了Django處理枚舉(枚舉模型)及source的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • Python 字典dict使用介紹

    Python 字典dict使用介紹

    這篇文章主要介紹了Python 字典dict使用介紹,需要的朋友可以參考下
    2014-11-11
  • python 字典 setdefault()和get()方法比較詳解

    python 字典 setdefault()和get()方法比較詳解

    這篇文章主要介紹了python 字典 setdefault()和get()方法比較詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • pytorch中tensorboard安裝及安裝過程中出現(xiàn)的常見錯誤問題

    pytorch中tensorboard安裝及安裝過程中出現(xiàn)的常見錯誤問題

    這篇文章主要介紹了pytorch中tensorboard安裝及安裝過程中出現(xiàn)的常見錯誤問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 詳解如何使用pandas進(jìn)行時間序列數(shù)據(jù)的周期轉(zhuǎn)換

    詳解如何使用pandas進(jìn)行時間序列數(shù)據(jù)的周期轉(zhuǎn)換

    時間序列數(shù)據(jù)是數(shù)據(jù)分析中經(jīng)常遇到的類型,為了更多的挖掘出數(shù)據(jù)內(nèi)部的信息,我們常常依據(jù)原始數(shù)據(jù)中的時間周期,將其轉(zhuǎn)換成不同跨度的周期,下面以模擬的K線數(shù)據(jù)為例,演示如何使用pandas來進(jìn)行周期轉(zhuǎn)換,感興趣的朋友可以參考下
    2024-05-05
  • Python進(jìn)階篇之字典操作總結(jié)

    Python進(jìn)階篇之字典操作總結(jié)

    字典是Python語言中唯一的映射類型。字典對象是可變的,它是一個容器類型,能存儲任意個數(shù)的Python對象,其中也可包括其他容器類型。在學(xué)習(xí)了 Python 基本的字典操作后,通過學(xué)習(xí)本文的這些進(jìn)階操作,讓寫出的代碼更加優(yōu)雅簡潔和pythonic。下面來一起看看吧。
    2016-11-11
  • Python爬蟲如何破解JS加密的Cookie

    Python爬蟲如何破解JS加密的Cookie

    這篇文章主要介紹了Python爬蟲如何破解JS加密的Cookie,幫助大家更好的理解和使用爬蟲,感興趣的朋友可以了解下
    2020-11-11
  • Python 多線程共享變量的實(shí)現(xiàn)示例

    Python 多線程共享變量的實(shí)現(xiàn)示例

    這篇文章主要介紹了Python 多線程共享變量的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04

最新評論