解密python的id()函数

本文通过对比整数与浮点数在Python中使用id()和is时的表现,揭示了解释器对于小整数及短字符串进行优化的内部机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

>>> a = 2.5

>>> b = 2.5
>>> c = b
>>> a is c
False
>>> a = 2
>>> b = 2
>>> c = b
>>> a is c
True

今天在使用is函数的时候去打印a,b分别被赋值为2.5 和2的情况,发现:

>>> a = 2
>>> b = 2
>>> id(a)
21132060
>>> id(b)
21132060
>>> a = 2.5
>>> b = 2.5
>>> id(a)
19622112
>>> id(b)
29321464

当a,b为2的时候id相同,而为2.5的时候不同,这种情况在string字符串的时候也会出现,即当很短的a,b赋值很短的字符串的时候,它们的id值相同,而很长的则不会;

在查阅了:

http://stackoverflow.com/questions/4293408/ids-of-immutable-types

http://stackoverflow.com/questions/3402679/identifying-objects-why-does-the-returned-value-from-id-change

之后,可以得到一个简单的结论就是:解释器在对值很小的int和很短的字符串的时候做了一点小优化,只分配了一个对象,让它们id一样了。



### 使用Python实现RSA解密 为了使用Python实现RSA解密,主要依赖于`cryptography`库或`pycryptodome`库。以下是基于这两个库的具体方法。 #### 方法一:使用 `cryptography` 库 安装所需的包可以通过pip完: ```bash pip install cryptography ``` 下面是一个简单的例子展示如何加载私钥并执行解密操作[^2]: ```python from cryptography.hazmat.primitives.asymmetric import rsa, padding from cryptography.hazmat.primitives import serialization, hashes def decrypt_message(private_key_path, ciphertext): with open(private_key_path, "rb") as key_file: private_key = serialization.load_pem_private_key( key_file.read(), password=None, ) original_message = private_key.decrypt( ciphertext, padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None ) ) return original_message.decode('utf-8') # 假设有一个名为encrypted_data.bin的文件存储着已加密的数据, # 并且有对应的private_key.pem作为私钥。 with open("encrypted_data.bin", 'rb') as f: encrypted_text = f.read() decrypted_text = decrypt_message('private_key.pem', encrypted_text) print(f"The decrypted text is: {decrypted_text}") ``` #### 方法二:使用 `PyCryptodome` 库 对于更传统的做法,则可以选择`pycryptodome`库来进行同样的工作。先确保已经安装好该库: ```bash pip install pycryptodome ``` 接着按照如下方式编写解密函数[^1]: ```python from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_OAEP import base64 def decrypt_rsa(private_key_loc, package): ''' param: public/private-keyfile loc .pem param: package (bytes or hex string) ''' with open(private_key_loc, 'r') as fk: private_key = RSA.importKey(fk.read()) cipher = PKCS1_OAEP.new(private_key) if isinstance(package, str): # 如果输入的是十六进制字符串形式 package = bytes.fromhex(package) decrypted_message = cipher.decrypt(package).decode() return decrypted_message # 测试解密功能 if __name__ == '__main__': enc_msg_hex = '...' # 这里应该放置实际的加密消息(如果是从其他地方获取到的话) # 或者读取来自文件中的加密内容 result = decrypt_rsa('./keys/id_rsa', enc_msg_hex) print(result) ``` 这两种方法都可以有效地帮助用户利用Python进行RSA解密处理。选择哪一个取决于个人偏好或是项目环境的要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值