日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JS加密方式

發布時間:2024/1/8 javascript 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JS加密方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

常見加密方式:

加密:
前端{
1.把加密的數據給后端
2.JS加密
3.攜帶正確的參數——進行加密}
后端:存入數據庫或者校驗

為了反爬,前端請求就會進行攜帶指定的參數,參數的值會進行加密,后端再進行校驗

1.MD5加密

概念:線型散列算法(簽名算法)
加密:產生一個固定長度的十六進制的數據(32位或16位)
解密:常規的說法:MD5是不存在解密的(不可解密)。
理論上可以破解——暴力破解,逐個比對,輪詢,但需要龐大的數據量、長時間、高性能機器。
JS如何進行MD5加密?
壓縮文件:命名符合規范,就會有min
https://cdn.bootcss.com/blueimp-md5/1.1.0/js/md5.min.js
未壓縮文件:https://cdn.bootcss.com/blueimp-md5/1.1.0/js/md5.js
開發階段選擇未壓縮文件,可讀性強,部署階段用壓縮文件,節約空間

JS實現:

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>MD5</title> </head> <body><script type="text/javascript" src="http://cdn.bootcss.com/blueimp-md5/1.1.0/js/md5.min.js"></script><script type="text/javascript">//MD5加密var sign = md5('123456')console.log(sign)</script> </body> </html>

python實現:

from hashlib import md5def md5_encryption(code):'''md5加密——方法返回對象:param code: str類型,要加密的字符串:return:str:返回加密后的字符串'''md = md5() #實例化——得到MD5加密對象md.update(code.encode()) #生成加密數據return md.hexdigest() #獲取加密數據if __name__ == '__main__':sign = md5_encryption('123456')print(sign,len(sign))

實例:有道翻譯JS逆向(MD5)

需求:抓取有道的接口,實現翻譯的功能

步驟
1.參數分析步驟
(1)ctrl+shift+f全局搜索參數字段
(2)逐個分析
(3)拆解:假設、驗證,console ,斷點進行參數查看
2.python實現

spider.py

import scrapy from time import time import random from hashlib import md5class YoudaoSpider(scrapy.Spider):name = 'youdao'# allowed_domains = ['www.xxx.com']start_urls = ['https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule',]def start_requests(self):# 獲取查詢單詞word = input('請輸入你要查詢的單詞:')# 獲取當前時間戳lts = str(int(time() * 1000))# 獲取saltsalt = lts + str(random.randint(0, 9))# 獲取signsign = "fanyideskweb" + word + salt + "Y2FYu%TNSbMCxc3t2u^XT"md = md5() # 實例化——得到MD5加密對象md.update(sign.encode()) # 生成加密數據sign = md.hexdigest()post_data = {'i': word,'from': 'AUTO','to': 'AUTO','smartresult': 'dict','client': 'fanyideskweb','salt': salt,'sign': sign,'lts': lts,'bv': '679a714475741baa9769e4725c532bb7','doctype': 'json','version': '2.1','keyfrom': 'fanyi.web','action': 'FY_BY_REALTlME',}# 將cookie轉成字典類型cookies = 'OUTFOX_SEARCH_USER_ID=1370777476@2409:8920:400:46ac:a171:61b:7868:1c32; OUTFOX_SEARCH_USER_ID_NCOO=1092215250.8540661; UM_distinctid=179d34a1f154d-057d5ca47388f3-6701b35-144000-179d34a1f161e3; JSESSIONID=aaap-S9l5WclRfOMVkgQx; ___rl__test__cookies='+ltscookies = {i.split('=')[0]: i.split('=')[1] for i in cookies.split('; ')}print(post_data)# 手動發送post請求yield scrapy.FormRequest(url = self.start_urls[0],headers={'Host': 'fanyi.youdao.com','Origin': 'https://fanyi.youdao.com','Referer': 'https://fanyi.youdao.com/','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36',},formdata=post_data,callback=self.parse,cookies = cookies)def parse(self, response):print(response,response.text)

2.DEF/AES加密

概念:對稱性加密算法

DES加密:

from Cryptodome.Cipher import DES import binascii from time import time import random class MyDESCipher:def __init__(self,key,iv):self.key = keyself.iv = ivdef encryption(self,data):''':param data::return:'''cipher = DES.new(self.key,DES.MODE_CFB,self.iv)data = data.encode()return binascii.b2a_hex(cipher.encrypt(data))def decryption(self,data):'''解密:param data:十六進制轉二進制:return:'''data = binascii.a2b_hex(data)cipher =DES.new(self.key,DES.MODE_CFB,self.iv)#創建相同的規則return cipher.decrypt(data).decode()if __name__ == '__main__':#需要加密的數據word = 'hello world'lts = str(int(time() * 1000)) # 獲取當前時間戳salt = lts + str(random.randint(0, 9)) # 獲取saltsign = "fanyideskweb" + word + salt + "Y2FYu%TNSbMCxc3t2u^XT" # 獲取sign# 秘鑰key = b'maquYIGE'iv = b'12345678'myDEFCipher = MyDESCipher(key,iv)res = myDEFCipher.encryption(sign)print(res)data = myDEFCipher.decryption(res)print(data)

AES加密:

from Cryptodome import Random from Cryptodome.Cipher import AES import binascii from time import time import random class MyAESCipher:def __init__(self,key,iv):self.key = keyself.iv = Random.new().read(AES.block_size)def encryption(self,data):''':param data::return:'''cipher = AES.new(self.key,AES.MODE_CFB,self.iv)data = data.encode()return binascii.b2a_hex(cipher.encrypt(data))def decryption(self,data):'''解密:param data:十六進制轉二進制:return:'''data = binascii.a2b_hex(data)cipher =AES.new(self.key,AES.MODE_CFB,self.iv)#創建相同的規則return cipher.decrypt(data).decode()if __name__ == '__main__':#需要加密的數據word = 'hello world'lts = str(int(time() * 1000)) # 獲取當前時間戳salt = lts + str(random.randint(0, 9)) # 獲取saltsign = "fanyideskweb" + word + salt + "Y2FYu%TNSbMCxc3t2u^XT" # 獲取sign# 秘鑰,偏移向量(16位)key = b'maquYIGEmaquYIGE'#iv = Random.new().read(AES.block_size)myAESCipher = MyAESCipher(key,iv)res = myAESCipher.encryption(sign)print(res)data = myAESCipher.decryption(res)print(data)

3.RSA加密

概念:非對稱性加密算法
兩個秘鑰,分為秘鑰:公鑰和私鑰,私鑰由公鑰計算得到。
公鑰對數據進行加密,只有使用對應的私鑰才能解密。
優點:算法復雜
缺點:比對稱加密慢

import rsa import binasciidef rsa_encrypt(rsa_n,rsa_e,data):#公鑰key = rsa.PublicKey(rsa_n,rsa_e)res = rsa.encrypt(data.encode(),key)return binascii.b2a_hex(res)public_n = '30819f300d06092a864886f70d010101050003818d0030818902818100b231a2588df3a48d614084d22124b409076cbc386dc1dd877ca01bffddedd41a519ac83537dacaf7b797c2a9e4200bce661dc433e856963f928b1e4022d3a875fbe68a796c049a6df721e16c035e58936f0476279bed93129cc39768788dd48761df8e45c8eb2a9fe0bcab4ee9226d524a28c9a60878878fbdcca8bb344fb6a10203010001' public_e = '10001' #一般都是這個#把16進制數據轉整數 rsa_n = int(public_n,16) rsa_e = int(public_e,16) data = 'hello world' print(rsa_encrypt(rsa_n,rsa_e,data))

自定義加密方式


import rsa import binasciidef rsa_encrypt(rsa_n,rsa_e,data):#公鑰key = rsa.PublicKey(rsa_n,rsa_e)res = rsa.encrypt(data.encode(),key)return binascii.b2a_hex(res)public_n = '30819f300d06092a864886f70d010101050003818d0030818902818100b231a2588df3a48d614084d22124b409076cbc386dc1dd877ca01bffddedd41a519ac83537dacaf7b797c2a9e4200bce661dc433e856963f928b1e4022d3a875fbe68a796c049a6df721e16c035e58936f0476279bed93129cc39768788dd48761df8e45c8eb2a9fe0bcab4ee9226d524a28c9a60878878fbdcca8bb344fb6a10203010001' public_e = '10001' #一般都是這個#把16進制數據轉整數 rsa_n = int(public_n,16) rsa_e = int(public_e,16) data = 'hello world' print(rsa_encrypt(rsa_n,rsa_e,data))

總結

以上是生活随笔為你收集整理的JS加密方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。