В современном взаимосвязанном мире безопасность данных имеет первостепенное значение. Шифрование играет жизненно важную роль в защите конфиденциальной информации от несанкционированного доступа. Сообщение об ошибке «Неподдерживаемый шифр или неверная длина ключа. Поддерживаемые шифры: aes-128-cbc, aes-256-cbc, aes-128» предполагает, что выбранный шифр или длина ключа не поддерживаются. В этой статье мы рассмотрим три популярных метода шифрования — AES-128-CBC, AES-256-CBC и AES-128 — и приведем примеры кода для каждого.
- AES-128-CBC:
AES-128-CBC (128-битная цепочка блоков шифра расширенного стандарта шифрования) — это алгоритм симметричного шифрования, использующий 128-битный ключ и работающий с блоками данных. Вот пример шифрования и расшифровки данных с использованием AES-128-CBC в Python:
import hashlib
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
key = hashlib.sha256(b'mykey').digest()[:16]
data = b'This is my secret message'
cipher = AES.new(key, AES.MODE_CBC)
ciphertext = cipher.encrypt(pad(data, AES.block_size))
print("Ciphertext:", ciphertext)
decipher = AES.new(key, AES.MODE_CBC, iv=cipher.iv)
plaintext = unpad(decipher.decrypt(ciphertext), AES.block_size)
print("Plaintext:", plaintext.decode())
- AES-256-CBC:
AES-256-CBC аналогичен AES-128-CBC, но использует более длинный 256-битный ключ. Вот пример использования AES-256-CBC в Java:
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class AES256CBCExample {
public static void main(String[] args) throws Exception {
String keyString = "mykey";
String message = "This is my secret message";
byte[] keyBytes = keyString.getBytes(StandardCharsets.UTF_8);
byte[] ivBytes = new byte[16]; // Initialization Vector
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, keySpec, new IvParameterSpec(ivBytes));
byte[] encrypted = cipher.doFinal(message.getBytes(StandardCharsets.UTF_8));
System.out.println("Ciphertext: " + Base64.getEncoder().encodeToString(encrypted));
cipher.init(Cipher.DECRYPT_MODE, keySpec, new IvParameterSpec(ivBytes));
byte[] decrypted = cipher.doFinal(encrypted);
System.out.println("Plaintext: " + new String(decrypted, StandardCharsets.UTF_8));
}
}
- AES-128:
AES-128 — это вариант AES, который использует 128-битный ключ и не использует цепочку блоков шифрования. Вот пример использования AES-128 в C#:
using System;
using System.Security.Cryptography;
using System.Text;
public class AES128Example
{
public static void Main()
{
string keyString = "mykey";
string message = "This is my secret message";
byte[] keyBytes = Encoding.UTF8.GetBytes(keyString);
byte[] ivBytes = new byte[16]; // Initialization Vector
using (AesCryptoServiceProvider aes = new AesCryptoServiceProvider())
{
aes.Key = keyBytes;
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
aes.IV = ivBytes;
ICryptoTransform encryptor = aes.CreateEncryptor();
byte[] encrypted = encryptor.TransformFinalBlock(Encoding.UTF8.GetBytes(message), 0, message.Length);
Console.WriteLine("Ciphertext: " + Convert.ToBase64String(encrypted));
ICryptoTransform decryptor = aes.CreateDecryptor();
byte[] decrypted = decryptor.TransformFinalBlock(encrypted, 0, encrypted.Length);
Console.WriteLine("Plaintext: " + Encoding.UTF8.GetString(decrypted));
}
}
}
В этой статье мы рассмотрели три популярных метода шифрования: AES-128-CBC, AES-256-CBC и AES-128. Мы предоставили примеры кода на Python, Java и C#, чтобы продемонстрировать, как шифровать и расшифровывать данные с помощью этих алгоритмов шифрования. Помните, что безопасность данных — важнейший аспект современных технологий, и выбор правильного метода шифрования может значительно повысить защиту конфиденциальной информации.