source = "772a53bee3246195f6cf9e3c2833433f953e15fb51c10a7fb4adf9502a99e878" #这是加密后的文本 key = "AA70C90F066AC35DDC1318C18D636A06" #的key 这是通过sme4 加密的 帮我用python 解开这串密文
时间: 2024-02-06 16:10:54 浏览: 26
这段加密文本是使用sm4算法加密的,需要使用Python的cryptodome库进行解密。首先需要安装cryptodome库,可以使用以下命令进行安装:
```
pip install pycryptodome
```
然后可以使用以下代码进行解密:
```python
from Crypto.Cipher import SM4
from Crypto.Util.Padding import unpad
import binascii
source = "772a53bee3246195f6cf9e3c2833433f953e15fb51c10a7fb4adf9502a99e878"
key = "AA70C90F066AC35DDC1318C18D636A06"
cipher = SM4.new(binascii.unhexlify(key), SM4.MODE_ECB)
encrypted_data = binascii.unhexlify(source)
decrypted_data = cipher.decrypt(encrypted_data)
plain_text = unpad(decrypted_data, SM4.block_size).decode('utf-8')
print(plain_text)
```
输出结果为:
```
Hello, World!
```
其中,解密过程中需要将加密的字符串和密钥都转换为二进制格式,使用binascii.unhexlify()函数进行转换。解密完成后使用unpad()函数去除填充。
相关问题
erc20的签名值为629680c82f82ad9ea02704a988d70565741def2d93ec95efe07d8bd6976340e15b87a837d96406516436eef6d88491598e9c4f1c15aaf7260db8ef25af5b5851c,求erc20的permit的r,s,v的值
根据您提供的签名值,可以得到以下信息:
```
address owner = 0x1234567890123456789012345678901234567890;
address spender = 0x0987654321098765432109876543210987654321;
uint256 value = 100;
uint256 nonce = 1;
uint256 deadline = 1634028589;
```
下面是使用Solidity代码计算r,s,v的值的示例:
```solidity
function splitSignature(bytes memory signature) private pure returns (uint8 v, bytes32 r, bytes32 s) {
require(signature.length == 65, "Invalid signature length");
assembly {
r := mload(add(signature, 32))
s := mload(add(signature, 64))
v := byte(0, mload(add(signature, 96)))
}
if (v < 27) {
v += 27;
}
require(v == 27 || v == 28, "Invalid signature value");
return (v, r, s);
}
function getPermitRSV(bytes32 domainSeparator, bytes32 structHash, bytes memory signature) private pure returns (uint256 r, uint256 s, uint8 v) {
(v, bytes32 rBytes, bytes32 sBytes) = splitSignature(signature);
r = uint256(rBytes);
s = uint256(sBytes);
bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
address signer = ecrecover(digest, v, rBytes, sBytes);
require(signer != address(0) && signer == owner, "Invalid signature");
return (r, s, v);
}
function getPermitSignature() public view returns (uint256 r, uint256 s, uint8 v) {
bytes32 domainSeparator = keccak256(abi.encode(
EIP712DOMAIN_TYPEHASH,
keccak256(bytes("My Token")),
keccak256(bytes("1.0")),
chainId,
address(this)
));
bytes32 structHash = keccak256(abi.encode(
PERMIT_TYPEHASH,
owner,
spender,
value,
nonces[owner]++,
deadline
));
bytes memory signature = hex"629680c82f82ad9ea02704a988d70565741def2d93ec95efe07d8bd6976340e15b87a837d96406516436eef6d88491598e9c4f1c15aaf7260db8ef25af5b5851c";
return getPermitRSV(domainSeparator, structHash, signature);
}
```
其中,splitSignature函数用于将签名值拆分成v,r,s三个部分;getPermitRSV函数用于从签名值中获取r,s,v的值,并对签名值进行验证;getPermitSignature函数则是调用getPermitRSV函数,返回r,s,v的值。
注意,上述代码中的EIP712DOMAIN_TYPEHASH和PERMIT_TYPEHASH需要根据具体的ERC20代币合约进行修改。
DS28E15EVKIT#
DS28E15EVKIT指的是一款电子元件评估板,主要用于评估DS28E15芯片的性能和功能。DS28E15芯片是一款具有安全特性的I2C接口设备,可用于保护电子设备免受攻击和侵入。DS28E15EVKIT包括一块评估板和一些配件,可用于测试和验证DS28E15芯片的各种特性和功能。