aes 相关问题

高级加密标准(AES)是一种加密分组密码算法。

如何在C++中使用56位密钥的AES加密? [已关闭]

这听起来像是一个愚蠢的问题,因为我读到 AES 支持至少 128 位密钥大小,但我的任务是找到一种方法将加密密钥大小从 2048 位减少到仅 56 位......

回答 0 投票 0

相关键攻击

Biryukov 的论文“Related-key Cryptanalysis of the Full AES-192 and AES-256”表明我们可以使用 4 个 #keys 和数据内存以及时间 2^99 来攻击全轮 AES-256。这个结果太棒了...

回答 0 投票 0

我可以使用 AES 来随机播放 UUIDv7 吗?

在我们的Web服务中,我们使用UUIDv7作为资源的主键,其中前48位表示时间戳。有些用户对重复的第一段感到震惊,因为他们已经习惯了

回答 1 投票 0

涂鸦智能锁开放API的密码如何加密

请记住,我在编码方面非常新手并且迷失了方向。 我正在尝试使用 Postman 为使用涂鸦应用程序的智能锁生成临时文件。 我目前被密码困住了

回答 1 投票 0

Python 中的 PHP openssl AES

我正在开发一个使用 PHP 解密 AES-256-CBC 消息的项目 我正在开发一个使用 PHP 解密 AES-256-CBC 消息的项目 <?php class CryptService{ private static $encryptMethod = 'AES-256-CBC'; private $key; private $iv; public function __construct(){ $this->key = hash('sha256', 'c7b35827805788e77e41c50df44441491098be42'); $this->iv = substr(hash('sha256', 'c09f6a9e157d253d0b2f0bcd81d338298950f246'), 0, 16); } public function decrypt($string){ $string = base64_decode($string); return openssl_decrypt($string, self::$encryptMethod, $this->key, 0, $this->iv); } public function encrypt($string){ $output = openssl_encrypt($string, self::$encryptMethod, $this->key, 0, $this->iv); $output = base64_encode($output); return $output; } } $a = new CryptService; echo $a->encrypt('secret'); echo "\n"; echo $a->decrypt('S1NaeUFaUHdqc20rQWM1L2ZVMDJudz09'); echo "\n"; 输出 >>> S1NaeUFaUHdqc20rQWM1L2ZVMDJudz09 >>> secret 现在我必须编写 Python 3 代码来加密数据。 我尝试过使用 PyCrypto 但没有成功。我的代码: import base64 import hashlib from Crypto.Cipher import AES class AESCipher: def __init__(self, key, iv): self.key = hashlib.sha256(key.encode('utf-8')).digest() self.iv = hashlib.sha256(iv.encode('utf-8')).digest()[:16] __pad = lambda self,s: s + (AES.block_size - len(s) % AES.block_size) * chr(AES.block_size - len(s) % AES.block_size) __unpad = lambda self,s: s[0:-ord(s[-1])] def encrypt( self, raw ): raw = self.__pad(raw) cipher = AES.new(self.key, AES.MODE_CBC, self.iv) return base64.b64encode(cipher.encrypt(raw)) def decrypt( self, enc ): enc = base64.b64decode(enc) cipher = AES.new(self.key, AES.MODE_CBC, self.iv ) return self.__unpad(cipher.decrypt(enc).decode("utf-8")) cipher = AESCipher('c7b35827805788e77e41c50df44441491098be42', 'c09f6a9e157d253d0b2f0bcd81d338298950f246') enc_str = cipher.encrypt("secret") print(enc_str) 输出 >>> b'tnF87LsVAkzkvs+gwpCRMg==' 但是我需要输出 S1NaeUFaUHdqc20rQWM1L2ZVMDJudz09,它将 PHP 解密为 secret。如何修改Python代码以获得预期的输出? PHP 的 hash 默认输出十六进制编码的字符串,但 Python 的 .digest() 返回 bytes。您可能想使用 .hexdigest(): def __init__(self, key, iv): self.key = hashlib.sha256(key.encode('utf-8')).hexdigest()[:32].encode("utf-8") self.iv = hashlib.sha256(iv.encode('utf-8')).hexdigest()[:16].encode("utf-8") 初始化向量(IV)的思想是为使用相同密钥的加密提供随机化。如果您使用相同的 IV,攻击者可能能够推断出您发送了相同的消息两次。这可以被认为是一个损坏的协议。 IV 不应该是秘密的,因此您只需将其与密文一起发送即可。通常在加密期间将其添加到密文中并在解密之前将其切掉。 加密.php function encrypt($data, $passphrase) { if(is_array($data)) $data = json_encode($data); $secret_key = hash('sha256', $passphrase, true); $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc')); $encrypted_64 = openssl_encrypt($data, 'aes-256-cbc', $secret_key, 0, $iv); $iv_64 = base64_encode($iv); $json = new stdClass(); $json->iv = $iv_64; $json->data = $encrypted_64; return base64_encode(json_encode($json)); } function decrypt($data, $passphrase) { $secret_key = hash('sha256', $passphrase, true); $json = json_decode(base64_decode($data)); $iv = base64_decode($json->{'iv'}); $encrypted_64 = $json->{'data'}; $data_encrypted = base64_decode($encrypted_64); $decrypted = openssl_decrypt($data_encrypted, 'aes-256-cbc', $secret_key, OPENSSL_RAW_DATA, $iv); $decoded = json_decode($decrypted,true) ; return is_array($decoded) ? $decoded : $decrypted; } python 加密.py import base64 import hashlib from Crypto.Cipher import AES import json def pad(data): block_size = AES.block_size padding = block_size - len(data) % block_size return data + bytes([padding] * padding) def encrypt(data, passphrase): if isinstance(data, dict): data = json.dumps(data) secret_key = hashlib.sha256(passphrase.encode()).digest() iv = AES.new(secret_key, AES.MODE_CBC).iv cipher = AES.new(secret_key, AES.MODE_CBC, iv) data = data.encode('utf-8') padded_data = pad(data) encrypted_data = cipher.encrypt(padded_data) iv_64 = base64.b64encode(iv).decode() encrypted_64 = base64.b64encode(encrypted_data).decode() son_data = {"iv": iv_64, "data": encrypted_64} return base64.b64encode(json.dumps(json_data).encode()).decode() def decrypt(encrypted_data, passphrase): secret_key = hashlib.sha256(passphrase.encode()).digest() json_data = json.loads(base64.b64decode(encrypted_data)) iv = base64.b64decode(json_data['iv']) encrypted_data = base64.b64decode(json_data['data']) cipher = AES.new(secret_key, AES.MODE_CBC, iv) decrypted_data = cipher.decrypt(encrypted_data) decrypted_data = decrypted_data[:-decrypted_data[-1]] decrypted_data = decrypted_data.decode('utf-8') loaded_data = json.loads(decrypted_data) if isinstance(loaded_data, dict): return loaded_data return decrypted_data

回答 2 投票 0

将用 C# 编写的解密代码迁移到 Apex

在 C# 中 AES256CBC 类 { 公共静态字符串 HexToString(字符串 hexString) { // 从输入字符串中删除任何空格或其他非十六进制字符 十六进制...

回答 0 投票 0

填充无效,无法删除使用“AesManaged”C#解密字符串时出现异常

请建议我在哪里需要更新/重构代码以消除异常。当我尝试使用以下代码解密加密的字符串时出现异常。 下面一行是 throw...

回答 2 投票 0

使用 openssl_encrypt() 的 PHP AES 加密没有得到预期的输出

我正在尝试使用以下 AES 选项加密字符串: 模式(CBC) 填充(pkcs7) 按键大小(128/8) 我正在尝试使用 hNeoNeuYKOkm0dbo 的 ivKey 加密值 17eDP2M0ir6nf7H0 使用

回答 0 投票 0

两种语言之间的 AES 加密不产生输出 [关闭]

尝试通过 AES 加密将数据从 Javascript 发送到 Perl。但是,在 Perl 端解码时我没有得到任何输出。 编辑: 期望的行为——让 Perl 代码对我进行解密……

回答 0 投票 0

将 AES 256 cbc 加密和解密方法从 PHP 转换为节点 js

我在我的项目中预先编写了AES 256 cbc加密和解密方法,现在我正在将几个模块升级到Node.js。这是 PHP 方法: 功能加密($数据) { $first_key =

回答 0 投票 0

Java 中的 7z 压缩和 AES 256 加密

我正在尝试编写一个 java 代码,它可以压缩 .7z 格式的任何文件并使用 AES 256 对其进行加密。基本上我有一个用例,我需要通过 java 代码压缩和加密文件......

回答 0 投票 0

`geom_density_ridges()` 需要以下缺失的美学:y(分组函数无响应)

我有当前的数据集结构: 头部(子集) 批量抗原表达值数据集 1 5 CD57 1.7917310 之前 2 5 CD57 1.2932388 之前 3 5 CD57 0.

回答 1 投票 0

在 C# 中从 TCP 套接字读取 AES 加密消息?

我在 C# 中使用 TCP 套接字发送和接收使用 AES 加密算法的加密消息。问题是当我使用流阅读器接收加密消息时,它以 System.byte[] 的形式出现

回答 0 投票 0

将“AES-128-ECB”加密代码从 PHP 转换为 C#

我有一个要求,我需要将一些 PHP 代码转换为 C#.. 以下是需要转换的 PHP 代码: $data = "你好,世界!"; $key = "RTc0MDkwMEEwMDYxQjc4Mg==&quo...

回答 1 投票 0

Trying to decrypt a json file AES 128 CTR To get SALT, IV

Trying to decrypt a json file AES 128 CTR To get SALT , IV. 如果可能的话,我会在 python 中搜索一个程序。 许多人知道如何获取 json 文件 AES 128 CTR Salt 和 IV 但我没有找到用于 ge 的程序...

回答 1 投票 0

URL 安全 C# AES 加密

我在创建我在 URL 中传递的加密字符串时遇到问题。解密后我得到的字符不正确或出现错误。 “输入数据不是一个完整的块......

回答 1 投票 0

CryptoJS.AES 是否通过使用随机的 256 位字符串(一次使用)来确定?

我想在我的服务器上安全、永久地存储一个秘密。在存储它之前,我会运行以下代码: 从“crypto-js”导入 CryptoJS; const SECRET = '秘密'; 常量键 = CryptoJS.

回答 1 投票 0

javax.crypto.BadPaddingException:错误:1e000065:密码函数:OPENSSL_internal:BAD_DECRYPT

我将 AES 解密密钥存储在 AndroidKeyStore 中以解密来自 SQLiteDB 的数据。不幸的是,有时我很少收到此错误(任何 Android 设备和任何 API)。 我想知道究竟是什么......

回答 2 投票 0

在 C# 中解密 AES256

static byte[] HexToByteArray(string hex) { byte[] bytes = new byte[hex.Length / 2]; 对于 (int i = 0; i < bytes.Length; i++) { bytes[i] = Convert.ToByte(hex.

回答 0 投票 0

我收到错误消息“填充无效且无法删除。”当我尝试在 AES 中解密时

尝试在 AES 中解密时出现错误“填充无效且无法删除。” 这是我用来加密和解密的代码: 使用系统; 使用 System.Collections.Generic; 我们...

回答 1 投票 0

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.