Python 常见加密方式和实现

一、前言

我们所说的加密方式,都是对二进制编码的格式进行加密的,对应到Python中,则是我们的Bytes

所以当我们在Python中进行加密操作的时候,要确保我们操作的是Bytes,否则就会报错。

将字符串和Bytes互相转换可以使用encode()decode()方法。如下所示:

 # -*- coding:UTF-8 -*-
__author__ = 'rxz'# 方法中不传参数则是以默认的utf-8编码进行转换
a = "中国欢迎您".encode("utf-8")
print(a) # b'\xe4\xb8\xad\xe5\x9b\xbd\xe6\xac\xa2\xe8\xbf\x8e\xe6\x82\xa8'b = a.decode("utf-8")
print(b) #中国欢迎您

注:两位十六进制常常用来显示一个二进制字节。

利用binascii模块可以将十六进制显示的字节转换成我们在加解密中更常用的显示方式:

 # -*- coding:UTF-8 -*-
__author__ = 'rxz'
import binascii# 方法中不传参数则是以默认的utf-8编码进行转换
a = "中国欢迎您".encode("utf-8")
print(a) # b'\xe4\xb8\xad\xe5\x9b\xbd\xe6\xac\xa2\xe8\xbf\x8e\xe6\x82\xa8'c = binascii.b2a_hex('中国欢迎您'.encode())
print("c===",c) # c=== b'e4b8ade59bbde6aca2e8bf8ee682a8'd = binascii.a2b_hex(c)
print(d) #b'\xe4\xb8\xad\xe5\x9b\xbd\xe6\xac\xa2\xe8\xbf\x8e\xe6\x82\xa8'v = binascii.a2b_hex(c).decode("utf-8")
print(v)# 中国欢迎您
b = a.decode("utf-8")
print(b) #中国欢迎您

二、URL编码 

1、简介

正常的URL中是只能包含ASCII字符的,也就是字符、数字和一些符号。而URL编码就是一种浏览器用来避免url中出现特殊字符(如汉字)的编码方式。其实就是将超出ASCII范围的字符转换成带%的十六进制格式。

2、Python实现

 # -*- coding:UTF-8 -*-
__author__ = 'rxz'
from urllib import parsea = parse.quote("中国欢迎您")
print(a) #  %E4%B8%AD%E5%9B%BD%E6%AC%A2%E8%BF%8E%E6%82%A8b = parse.unquote(a)
print(b) #中国欢迎您

三、Base64编码

1、简介

Base64是一种用64个字符来表示任意二进制数据的方法。

Base64编码可以成为密码学的基石。可以将任意的二进制数据进行Base64编码。所有的数据都能被编码为并只用65个字符就能表示的文本文件。( 65字符:A~Z a~z 0~9 + / = )编码后的数据~=编码前数据的4/3,会大1/3左右。

2、Base64编码的原理

  1. 将所有字符转化为ASCII码。
  2. 将ASCII码转化为8位二进制 。
  3. 将二进制3个归成一组(不足3个在后边补0)共24位,再拆分成4组,每组6位。
  4. 统一在6位二进制前补两个0凑足8位。
  5. 将补0后的二进制转为十进制。
  6. 从Base64编码表获取十进制对应的Base64编码。

3、Base64编码的说明

  1. 转换的时候,将三个byte的数据,先后放入一个24bit的缓冲区中,先来的byte占高位。
  2. 数据不足3byte的话,于缓冲区中剩下的bit用0补足。然后,每次取出6个bit,按照其值选择查表选择对应的字符作为编码后的输出。
  3. 不断进行,直到全部输入数据转换完成。
  4. 如果最后剩下两个输入数据,在编码结果后加1个“=”。
  5. 如果最后剩下一个输入数据,编码结果后加2个“=”。
  6. 如果没有剩下任何数据,就什么都不要加,这样才可以保证资料还原的正确性。

4、Python的Base64使用

Python内置的base64模块可以直接进行base64的编解码

注意:用于base64编码的,要么是ASCII包含的字符,要么是二进制数据

 # -*- coding:UTF-8 -*-
__author__ = 'rxz'
import base64a = base64.b64encode(b"hello world")
print(a) #  b'aGVsbG8gd29ybGQ='b = base64.b64decode(a)
print(b) # b"hello world"

四、MD5(信息-摘要算法)

1、简述

message-digest algorithm 5(信息-摘要算法)。经常说的“MD5加密”,就是它→信息-摘要算法。

md5,其实就是一种算法。可以将一个字符串,或文件,或压缩包,执行md5后,就可以生成一个固定长度为128bit的串。这个串,基本上是唯一的。

2、不可逆性

每个人都有不同的指纹,看到这个人,可以得出他的指纹等信息,并且唯一对应,但你只看一个指纹,是不可能看到或读到这个人的长相或身份等信息。

3、特点

  1. 压缩性:任意长度的数据,算出的MD5值长度都是固定的。
  2. 容易计算:从原数据计算出MD5值很容易。
  3. 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
  4. 强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

举个栗子:世界上只有一个我,但是但是妞却是非常非常多的,以一个有限的我对几乎是无限的妞,所以可能能搞定非常多(100+)的妞,这个理论上的确是通的,可是实际情况下....

4、Python的MD5使用

由于MD5模块在python3中被移除,在python3中使用hashlib模块进行md5操作

 # -*- coding:UTF-8 -*-
__author__ = 'rxz'
import hashlib# 待加密信息
str = '中国你好'# 创建md5对象,
#md5对象,md5不能反解,但是加密是固定的,就是关系是一一对应,所以有缺陷,可以被对撞出来
hl = hashlib.md5()#要对哪个字符串进行加密,就放这里
# 此处必须声明encode
# 若写法为hl.update(str)  报错为: Unicode-objects must be encoded before hashing
hl.update(str.encode(encoding='utf-8'))print('MD5加密前为 :' + str)
#hl.hexdigest()) #拿到加密字符串
print('MD5加密后为 :' + hl.hexdigest())"""
MD5加密前为 :中国你好
MD5加密后为 :560a6b11a85d436acfa4bd7f34462f40
"""hash3 = hashlib.md5(bytes('abd',encoding='utf-8'))
''' 
如果没有参数,所以md5遵守一个规则,生成同一个对应关系,如果加了参数,
就是在原先加密的基础上再加密一层,这样的话参数只有自己知道,防止被撞库,
因为别人永远拿不到这个参数
'''
hash3 .update(bytes("admin",encoding = "utf-8"))
print(hash3.hexdigest()) #9aea3c0a6c51555c1a4d0a5e9b689ded

MD5不仅仅是上面这个例子这样用来处理字符串,还有更广泛的用途:

  • 加密网站注册用户的密码。 (但去年的各大网站密码泄漏事件确实让人蛋疼……)
  • 网站用户上传图片 / 文件后,计算出MD5值作为文件名。(MD5可以保证唯一性)
  • key-value数据库中使用MD5值作为key。
  • 比较两个文件是否相同。(大家在下载一些资源的时候,就会发现网站提供了MD5值,就是用来检测文件是否被篡改)
  • ……

处理大文件:

上面说过可以用MD5来检测两个文件是否相同,但想想,如果是两个很大的文件,担心内存不够用,这时怎么办?

这就要使用 update 方法了。代码如下:

 # -*- coding:UTF-8 -*-
__author__ = 'rxz'
import hashlibdef get_file_md5(f):m = hashlib.md5()while True:data = f.read(10240)if not data:breakm.update(data)return m.hexdigest()with open(YOUR_FILE, 'rb') as f:file_md5 = get_file_md5(f)

这里写一个利用md5进行用户登陆网站进行注册之后密码加密的基本事例,加深理解

import socket,struct,jsonip_port = ("127.0.0.1",8000)
back_log =5
buffer_size = 1024
tcp_client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcp_client.connect(ip_port)while True:cmd = input(">>>:")if not cmd:continue# 发送数据tcp_client.send(cmd.encode("gbk"))# 第一步:先收报头header = tcp_client.recv(4)# 第二步:从报头中解析(header数据的长度)header_size = struct.unpack("i",header)print('收到报头长度=', header_size)# 第三步:收到报头解析出对真实数据的描述信息header_json = tcp_client.recv(header_size)data = json.loads(header_json)print('收到报头内容=',data)total_size = data['total_size']# 第三步:接收真实的数据recv_size =0recv_data = b""while recv_size<total_size:data = tcp_client.recv(buffer_size)recv_data +=datarecv_size = len(recv_data)print('接收数据 =', recv_data.decode('gbk', 'ignore'))  # 如果设置为ignore,则会忽略非法字符;tcp_client.close()  # 关闭

以上的加密算法虽然非常厉害,但还是存在缺陷,即:通过撞库可以反解,所以,有必要对加密算法中添加自定义key再来做加密

5、MD5长度

md5的长度,默认为128bit,也就是128个0和1的二进制串。这样表达是很不友好的。所以将二进制转成了16进制,每4个bit表示一个16进制,所以128/4 = 32 换成16进制表示后,为32位了。

为什么网上还有md5是16位的呢?

其实16位的长度,是从32位md5值来的。是将32位md5去掉前八位,去掉后八位得到的。

6、hmac

python中还有一个hmac模块,它对我们创建key和内容再进行处理然后再加密

该模块加密是先把数据存储到字典中,然后再进行加密,方法与上述方法类似。

import hmachm = hmac.new(b'abc')
hm = hmac.new('中国你好'.encode(encoding='utf-8'),b'bads')
print(hm.digest())
print(hm.hexdigest())"""
b'\xc8;\x0c\x0b\xd42\xc37\xd0X\xbc\xfbf=RP'
c83b0c0bd432c337d058bcfb663d5250
"""

注:加密数据时一定要指定数据编码格式。

7、sha1 加密

SHA1的全称是Secure Hash Algorithm(安全哈希算法) 。SHA1基于MD5,加密后的数据长度更长,

它对长度小于264的输入,产生长度为160bit的散列值。比MD5多32位。

因此,比MD5更加安全,但SHA1的运算速度就比MD5要慢了。

 # -*- coding:UTF-8 -*-
__author__ = 'rxz'
import hashlibstr = "中国你好"
a = hashlib.sha1(str.encode("utf-8")).hexdigest()
print("sha1加密前为 :",str)
print("sha1加密前后 :",a)"""
sha1加密前为 : 中国你好
sha1加密前后 : 3e6c570876775d0031dbf66247ed1054d4ef695e
"""

 

五、Python加密库PyCryptodome

PyCrypto是 Python 中密码学方面最有名的第三方软件包。可惜的是,它的开发工作于2012年就已停止。

幸运的是,有一个该项目的分支PyCrytodome 取代了 PyCrypto 。

1、安装与导入

安装之前需要先安装Microsoft Visual c++ 2015

在Linux上安装,可以使用以下 pip 命令:

pip install pycryptodome

导入:

import Crypto

在Windows 系统上安装则稍有不同:

pip install pycryptodomex

导入:

import Cryptodome

2、DES

 1)简介

DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准。

DES是一个分组加密算法,典型的DES以64位为分组对数据加密,加密和解密用的是同一个算法。

DES算法的入口参数有三个:Key、Data、Mode。其中Key为7个字节共56位,是DES算法的工作密钥;Data为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。

密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位,使得每个密钥都有奇数个1),分组后的明文组和56位的密钥按位替代或交换的方法形成密文组。

算法步骤 
1)初始置换 
其功能是把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长3 2位,其置换规则为将输入的第58位换到第一位,第50位换到第2位……依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是输出的左32位,R0是右32位,例:设置换前的输入值为D1D2D3……D64,则经过初始置换后的结果为:L0=D58D50……D8;R0=D57D49……D7。 
其置换规则见下表: 
58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4, 
62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8, 
57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3, 
61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7, 
2)逆置换 
经过16次迭代运算后,得到L16、R16,将此作为输入,进行逆置换,逆置换正好是初始置换的逆运算,由此即得到密文输出。 
此算法是对称加密算法体系中的代表,在计算机网络系统中广泛使用.

加密和解密的过程

 # -*- coding:UTF-8 -*-
__author__ = 'rxz'
# 导入DES模块
from Cryptodome.Cipher import DES
import binascii# 这是密钥,此处需要将字符串转为字节
key = b'abcdefgh'# 需要去生成一个DES对象
def pad(text):"""# 加密函数,如果text不是8的倍数【加密文本text必须为8的倍数!】,那就补足为8的倍数:param text::return:"""while len(text) % 8 != 0:text += ' 'return text# 创建一个DES实例
des = DES.new(key,DES.MODE_ECB)
text ="I'm china!"
padded_text = pad(text)
print(padded_text)
#加密
encrypted_text = des.encrypt(padded_text.encode("utf-8"))
print(encrypted_text)
# rstrip(' ')返回从字符串末尾删除所有字符串的字符串(默认空白字符)的副本# 解密
plain_text = des.decrypt(encrypted_text).decode().rstrip(' ')
print(plain_text)"""
I'm china!      
b'\xc0`I\x15\x8bo\x00\x00\xb0\xe27\xfe)\xc3\xde,'
I'm china!
"""
 # -*- coding:UTF-8 -*-
__author__ = 'rxz'
# 导入DES模块
from Cryptodome.Cipher import DES
import binascii# 这是密钥
key = b'abcdefgh'
# 需要去生成一个DES对象
des = DES.new(key, DES.MODE_ECB)
# 需要加密的数据
text = 'python spider!'
text = text + (8 - (len(text) % 8)) * '='
# 加密的过程
encrypto_text = des.encrypt(text.encode())
# 加密过后二进制转化为ASCII 
encrypto_text = binascii.b2a_hex(encrypto_text)
print(encrypto_text)
# 解密需要ASCII 先转化为二进制 然后再进行解密
plaint = des.decrypt(binascii.a2b_hex(encrypto_text))
print(plaint)"""
b'084725d8f5ffafc61814fae0796bfd2f'
b'python spider!=='
"""

3、3DES 

3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。

由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解。3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。

3DES(即Triple DES)是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的加密标准),加密算法,其具体实现如下:设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,M代表明文,C代表密文,这样:

3DES加密过程为:C=Ek3(Dk2(Ek1(M)))

3DES解密过程为:M=Dk1(EK2(Dk3(C)))

 

4、AES 

1)简介

高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。

AES在软件及硬件上都能快速地加解密,相对来说较易于实作,且只需要很少的存储器。作为一个新的加密标准,目前正被部署应用到更广大的范围。
特点与思想:抵抗所有已知的攻击。 在多个平台上速度快,编码紧凑。 设计简单。 
 

AES为分组密码,分组密码也就是把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文。在AES标准规范中,分组长度只能是128位,也就是说,每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位。密钥的长度不同,推荐加密轮数也不同。

一般常用的是128位

 # -*- coding:UTF-8 -*-
__author__ = 'rxz'
from Cryptodome.Cipher import AES
from Cryptodome import Randomfrom binascii import a2b_hex# 要加密的明文
data = '南来北往'
# 密钥key必须为 16(AES-128), 24(AES-192), 32(AES-256)
key = b'this is a 16 key'
# 生成长度等于AES 块大小的不可重复的密钥向量
iv = Random.new().read(AES.block_size)
print(iv)
# 使用 key 和iv 初始化AES 对象, 使用MODE_CFB模式
mycipher = AES.new(key, AES.MODE_CFB, iv)
print(mycipher)
# 加密的明文长度必须为16的倍数, 如果长度不为16的倍数, 则需要补足为16的倍数
# 将iv(密钥向量)加到加密的密钥开头, 一起传输
ciptext = iv + mycipher.encrypt(data.encode())
# 解密的话需要用key 和iv 生成的AES对象
print(ciptext)
mydecrypt = AES.new(key, AES.MODE_CFB, ciptext[:16])
# 使用新生成的AES 对象, 将加密的密钥解密
decrytext = mydecrypt.decrypt(ciptext[16:])print(decrytext.decode())

 5、RSA

非对称加密 
典型的非对称加密 
典型的如RSA等,常见方法,使用openssl ,keytools等工具生成一对公私钥对,使用被公钥加密的数据可以使用私钥来解密,反之亦然(被私钥加密的数据也可以被公钥解密) 。

在实际使用中私钥一般保存在发布者手中,是私有的不对外公开的,只将公钥对外公布,就能实现只有私钥的持有者才能将数据解密的方法。 这种加密方式安全系数很高,因为它不用将解密的密钥进行传递,从而没有密钥在传递过程中被截获的风险,而破解密文几乎又是不可能的。

但是算法的效率低,所以常用于很重要数据的加密,常和对称配合使用,使用非对称加密的密钥去加密对称加密的密钥。

简介 
RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。

该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥。公钥是可发布的供任何人使用,私钥则为自己所有,供解密之用

而且,因为RSA加密算法的特性,RSA的公钥私钥都是10进制的,但公钥的值常常保存为16进制的格式,所以需要将其用int()方法转换为10进制格式。

 # -*- coding:UTF-8 -*-
__author__ = 'rxz'
import rsa# rsa加密
def rsaEncrypt(str):# 生成公钥、私钥(pubkey, privkey) = rsa.newkeys(512)print("pub: ", pubkey)print("priv: ", privkey)# 明文编码格式content = str.encode('utf-8')# 公钥加密crypto = rsa.encrypt(content, pubkey)return (crypto, privkey)# rsa解密
def rsaDecrypt(str, pk):# 私钥解密content = rsa.decrypt(str, pk)con = content.decode('utf-8')return con(a, b) = rsaEncrypt("hello")
print('加密后密文:')
print(a)
content = rsaDecrypt(a, b)
print('解密后明文:')
print(content)  

 

 # -*- coding:UTF-8 -*-
__author__ = 'rxz'
import rsa
import binasciidef rsa_encrypt(rsa_n, rsa_e, message):key = rsa.PublicKey(rsa_n, rsa_e)message = rsa.encrypt(message.encode(), key)message = binascii.b2a_hex(message)return message.decode()pubkey_n = '8d7e6949d411ce14d7d233d7160f5b2cc753930caba4d5ad24f923a505253b9c39b09a059732250e56c594d735077cfcb0c3508e9f544f101bdf7e97fe1b0d97f273468264b8b24caaa2a90cd9708a417c51cf8ba35444d37c514a0490441a773ccb121034f29748763c6c4f76eb0303559c57071fd89234d140c8bb965f9725'
pubkey_e = '10001'
rsa_n = int(pubkey_n, 16)
rsa_e = int(pubkey_e, 16)
message = '南北今天很忙'
print("公钥n值长度:", len(pubkey_n))aa = rsa_encrypt(rsa_n, rsa_e, message)
print(aa)
 # -*- coding:UTF-8 -*-
__author__ = 'rxz'
'''RSA算法'''from Cryptodome.PublicKey import RSAfrom Cryptodome.Cipher import PKCS1_OAEP, PKCS1_v1_5class MyRSA():def create_rsa_key(self, password):"""创建RSA密钥步骤说明:1、从 Crypto.PublicKey 包中导入 RSA,创建一个密码2、生成 1024/2048 位的 RSA 密钥3、调用 RSA 密钥实例的 exportKey 方法,传入密码、使用的 PKCS 标准以及加密方案这三个参数。4、将私钥写入磁盘的文件。5、使用方法链调用 publickey 和 exportKey 方法生成公钥,写入磁盘上的文件。"""key = RSA.generate(1024)encrypted_key = key.exportKey(passphrase=password.encode("utf-8"), pkcs=8,protection="scryptAndAES128-CBC")with open("my_private_rsa_key.bin", "wb") as f:f.write(encrypted_key)with open("my_rsa_public.pem", "wb") as f:f.write(key.publickey().exportKey())def encrypt(self, plaintext):# 加载公钥recipient_key = RSA.import_key(open("my_rsa_public.pem").read())cipher_rsa = PKCS1_v1_5.new(recipient_key)en_data = cipher_rsa.encrypt(plaintext.encode("utf-8"))return en_data# print(len(en_data), en_data)def decrypt(self, en_data, password):# 读取密钥private_key = RSA.import_key(open("my_private_rsa_key.bin").read(),passphrase=password)cipher_rsa = PKCS1_v1_5.new(private_key)data = cipher_rsa.decrypt(en_data, None)return data# print(data)mrsa = MyRSA()mrsa.create_rsa_key('123456')e = mrsa.encrypt('hello')d = mrsa.decrypt(e, '123456')print(e)print(d)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/143029.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Python读取excel表格中的网址并批量打开网页

import webbrowser import xlrdwb xlrd.open_workbook("demo.xlsx") sht wb.sheet_by_name("Sheet1") for x in range(sht.nrows):webbrowser.open(sht.cell(x, 1).value)# 用系统默认浏览器打开指定网页

如何批量打开一组网页?

有时要批量打开一组网页&#xff0c;研究出三种方法 1.使用在线的网页工具打开&#xff0c;如&#xff1a;http://www.a-site.cn/tool/kai/ 2.使用标签&#xff0c;新建一个标签文件夹&#xff0c;把要打开的网页放到这个文件夹下&#xff0c;在文件夹下右击选择“打开所有标签…

html 批量依次打开网页,傲游浏览器批量一键打开网页的几种方法

在傲游浏览器中&#xff0c;我们可以批量一键打开网页&#xff0c;你相信吗?这是真的。只要在傲游浏览器中创建一个空白文件夹&#xff0c;然后将需要打开的网页放入该文件夹中。一键登录的技巧下面来演示下。 软件名称&#xff1a;Maxthon傲游浏览器 v6.0.0.1700 Alpha 中文官…

简易小工具实现批量打开多个网页

最近有个需求&#xff0c;希望一次性可以打开多个网页&#xff0c;网址自由指定&#xff0c;这个需求的实现非常简单&#xff0c;使用基本的c代码调用system函数即可&#xff0c;都不需要MFC相关的东西。 但是我实测一些工具后发现一个问题&#xff0c;当打开超过大约3个网址的…

如何批量保存html,如何批量保存网页信息

如何批量保存网页信息 现在我们利用网络数据库探索者来批量保存这些联系地址&#xff0c;就能大大减少重复劳动的工作量。 下载地址&#xff1a;http://www2.skycn.com/soft/14620.html 一、查找页面规律 在使用网络数据库探索者前我们要摸清页面的规律&#xff0c;一般可以从两…

批处理批量打开网页

我们的Windows系统里有种文件拓展名是bat&#xff0c;或是cmd。 批处理(Batch)&#xff0c;也称为批处理脚本。顾名思义&#xff0c;批处理就是对某对象进行批量的处理。批处理文件的扩展名为bat 。目前比较常见 的批处理包含两类&#xff1a;DOS批处理和PS批处理。PS批处理是基…

DOS BAT脚本批量打开Edge网页

Bat脚本配置说明 前言打开效果详细命令测试环境 前言 测试业务时&#xff0c;需要批量打开网页&#xff0c;由于IE停止更新&#xff0c;本文以Edge为例。 关键点&#xff1a;页面打开需增加延迟&#xff0c;不要批量同时打开&#xff0c;否则容易漏掉&#xff0c;5个网址只能…

eyeurl—一款网页批量截图工具

eyeurl使用说明 开发说明 eyeurl由作者&#xff1a;云小书 开发&#xff0c;源于日常渗透测试中&#xff0c;信息收集到的url过多&#xff0c;挨个打开查看比较繁琐&#xff0c;且效率极低&#xff0c;网上有大佬开发的eyewitness&#xff0c;且ui布局各方面都比较完善&#…

批量保存网页

文章目录 背景工具SeleniumgeckodriverPyUserInput工具下载和安装 代码测试总结 背景 之前已经写了 2 篇文章&#xff1a; 备份 CSDN 博客&#xff08;上&#xff09; 备份 CSDN 博客&#xff08;下&#xff09; 但是效果都不怎么好&#xff0c;其实还有一种简单粗暴的方法…

批量获取/打开链接 - 实践

1.应用场景 批量操作, 打开链接. 2.学习/操作 思路 获取超链接标签, 然后使用批量打开每个超链接, 从而不需要手动一个个打开链接 完善 建议用脚本实现, 然后写一个定时脚本[服务器上],每天定时执行. 环境 Chrome浏览器/其他浏览器也可以 PHP 7.3 nginx 1.15/1.16 方式一 2.1…

批量保存网页为单个网页文件

有时候&#xff0c;总有会遇到一些奇怪的需求&#xff0c;各种搜索都找不到答案&#xff0c;本次记录批量保存网页到单个网页文件。 使用背景&#xff1a; 只想简单的解决问题&#xff0c;不涉及编程 网页带格式,将网页存为PDF格式会变 量太大&#xff0c;一个个的处理太累 涉及…

【数据安全-02】AI打假利器数字水印,及java+opencv实现

AIGC 的火爆引燃了数字水印&#xff0c;说实话数字水印并不是一项新的技术&#xff0c;但是这时候某些公司拿出来宣传一下特别应景&#xff0c;相应股票蹭蹭地涨。数字水印是什么呢&#xff0c;顾名思义&#xff0c;和我们在pdf中打的水印作用差不多&#xff0c;起到明确版权、…

python自动打开网页_python 自动批量打开网页的示例

python 自动批量打开网页的示例 如下所示&#xff1a; import webbrowser import codecs import time with open("test.txt") as fp: for ebayno in fp: url http://ebay.com/itm/ebayno.strip() time.sleep(1) #打开间隔时间 webbrowser.open(url) #打开网…

【bat批处理】手把手教你批量打开软件、文件、网页等

【bat批处理】打开软件、文件等 0- 前言1- start 命令用法1.0 注释1.1 start 命令说明1.2 启动软件1.3 打开文件1.4 打开文件夹1.5 打开网页 2-实战2.0 怎么创建bat批处理文件2.1 打开软件、文件、网页2.2 微信多开2.3 定时关机2.4 取消定时关机2.5 显示桌面图标 3 小结 0- 前言…

认识Vue中组件利器-插槽Slot-案例介绍

一. 插槽的使用 1.1. 认识插槽slot 在开发中&#xff0c;我们会经常封装一个个可复用的组件&#xff1a; 前面我们会通过props传递给组件一些数据&#xff0c;让组件来进行展示&#xff1b; 但是为了让这个组件具备更强的通用性&#xff0c;我们不能将组件中的内容限制为固定…

IDEA汉化后转回英文,只要三步

如果你觉得本文对你有帮助&#xff0c;麻烦动动手指顶一下

IntelliJ IDEA全界面汉化(官方插件)

现在很多人用IntelliJ IDEA写java代码&#xff0c;但小白很苦恼&#xff0c;看不懂&#xff0c;今天来分享一下怎么汉化 因为现在IDEA官方是支持汉化了&#xff0c;所以我们直接使用IDEA的插件 4. 下载Chinese汉化包&#xff08;第二个&#xff09; 重启IDEA就可以看到页面都变…

IDEA汉化及如何改回英文界面版本

相信很多小伙伴们刚接触IDEA时&#xff0c;看到一堆英文界面不知道如何下手&#xff0c;今天教大家一个插件直接将界面中文版本&#xff0c;以及改回英文版本。建议点赞收藏哈&#xff01; 一&#xff1a;汉化 1.打开左侧file,按箭头所示2.搜索Chinese&#xff0c;安装内存大的…

【IntelliJ IDEA】如何安装汉化插件

我使用的是2020.1的版本 汉化方式: 打开idea 点击settings 选择plugins 在marketplace 搜索 Chinese install之后 点击restart ide即可 汉化后的样子: 用不习惯也可以打开plugins 点开 installed将插件移除

IDEA汉化之2021版本

打开最新版本的IDEA后在浏览器直接进入Chinese (Simplified) Language Pack / 中文语言包 - IntelliJ IDEs | JetBrains&#xff0c;点击右上角&#xff0c;IDEA中会出现弹窗&#xff0c;直接起飞&#xff01;