encrypted = crypto.AES.encrypt(srcs, key, { iv: key, mode: crypto.mode.CFB, padding: crypto.pad.NoPadding })转换为Python代码
时间: 2024-01-11 16:05:40 浏览: 160
这是将一个字符串 `srcs` 用 AES 算法加密,加密的密钥为 `key`,加密模式为 CFB,填充方式为 NoPadding 的 JavaScript 代码。
下面是对应的 Python 代码:
```python
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
def aes_encrypt(srcs, key):
iv = key
cipher = AES.new(key, AES.MODE_CFB, iv=iv)
plaintext = pad(srcs.encode('utf-8'), AES.block_size)
ciphertext = cipher.encrypt(plaintext)
return ciphertext.hex()
```
其中,`srcs` 是要加密的字符串,`key` 是加密密钥。`iv` 也是加密密钥,因为 CFB 模式需要一个初始向量。
注意,Python 中默认的填充方式为 PKCS7,因此需要手动指定为 NoPadding。加密结果为一个十六进制的字符串。如果需要将加密结果转换为 Base64 格式,可以使用 `base64.b64encode()` 方法。
相关问题
export function AESEncrypt(word) { let srcs = CryptoJS.enc.Utf8.parse(word); var encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); return CryptoJS.enc.Hex.stringify(encrypted.ciphertext); } 对应的C#后台解密方法是什么
以下是对应的C#后台解密方法:
```
using System;
using System.Security.Cryptography;
using System.Text;
public static string AESDecrypt(string hexString)
{
byte[] encryptedBytes = HexToByteArray(hexString);
using (Aes aes = Aes.Create())
{
aes.Key = Encoding.UTF8.GetBytes(key);
aes.IV = Encoding.UTF8.GetBytes(iv);
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
using (MemoryStream ms = new MemoryStream(encryptedBytes))
{
using (CryptoStream cs = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Read))
{
using (StreamReader reader = new StreamReader(cs))
{
return reader.ReadToEnd();
}
}
}
}
}
private static byte[] HexToByteArray(string hexString)
{
int len = hexString.Length / 2;
byte[] bytes = new byte[len];
for (int i = 0; i < len; i++)
{
bytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
}
return bytes;
}
```
注意替换代码中的 `key` 和 `iv` 为你自己的密钥和向量。
function aesEncrypt(word){ if(word){ var val = ''; ajax.remoteCall('/yc-login/login?action=key',{},function(result){ var key = result.data; const aesKey = CryptoJS.enc.Utf8.parse(key); let srcs = CryptoJS.enc.Utf8.parse(word); let encrypted = CryptoJS.AES.encrypt(srcs, aesKey, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}); val = encrypted.toString(); },{async:false}); return val; }else{ return ''; } }
这是一个使用 AES 加密算法加密文本的 JavaScript 函数。它使用 CryptoJS 库来实现加密,并通过远程调用获取加密密钥。在调用 ajax.remoteCall 方法之前,它检查传入的文本是否为空,如果是空的将直接返回。
阅读全文