Цель C AES CBC Шифрование с нулевым заполнением
Я пытаюсь зашифровать строку с помощью шифрования AES 128, используя режим CBC, с нулевым заполнением. К сожалению, я не знаю, как это сделать, так как многие попытки не увенчались успехом. У меня есть код на C#, и мне было интересно, может ли кто-нибудь помочь мне в работе моего шифрования. код:
`using System;
using System.Security.Cryptography;
using System.Text;
using System.IO;
byte[] request = UTF8Encoding.UTF8.GetBytes("{string which needs encrypting}");
byte[] key = UTF8Encoding.UTF8.GetBytes("{key}");
byte[] iv = UTF8Encoding.UTF8.GetBytes("{iv}");
AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
aes.Key = key;
aes.IV = iv;
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.Zeros;
ICryptoTransform cTransform = aes.CreateEncryptor();
byte[] result = cTransform.TransformFinalBlock(request, 0, request.Length);
aes.Clear()
string encryptedRequest = Convert.ToBase64String(result, 0, result.Length);`
я посмотрел обычную криптографию, но я не вижу опции для режима CBC [в любом случае, я не слишком много знаю cccrypto, может быть, я упускаю из виду?] спасибо;
3 ответа
Метод в CommonCrypto.m
- (NSData *) dataEncryptedUsingAlgorithm: (CCAlgorithm) algorithm
key: (id) key
initializationVector: (id) iv
options: (CCOptions) options
error: (CCCryptorStatus *) error
объявление параметра iv
@param iv Initialization vector, optional. Used for Cipher Block Chaining (CBC) mode. If present, must be the same length as the selected algorithm's block size. If CBC mode is selected (by the absence of any mode bits in the options flags) and no IV is present, a NULL (all zeroes) IV will be used. This is ignored if ECB mode is used or if a stream cipher algorithm is selected.
так что вы могли бы пройти nil
значение для iv
параметр
Common Crypto - правильное место для поиска. В частности, вы хотите использовать третий параметр CCCryptorCreate, для которого CCOptions имеет значение 0. То есть по умолчанию используется CBC. Вам следует открыть CommonCrypto.h, так как на самом деле это лучшая документация, чем справочная страница. Вот пример того, как это сделать:
CCCryptorRef cryptorRef;
CCCryptorStatus rc;
rc = CCCryptorCreate(kCCEncrypt, kCCAlgorithmAES128, 0, key, keySize, NULL, &cryptorRef);
Я передал NULL для IV (что означает все нули) и предположил, что вы правильно установили ключ и размер ключа. В моем тесте я использовал 32-битный (256-битный) ключ.