Цель 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-битный) ключ.

Посмотрите на следующие ссылки.

AES1 AES2 AES3

Вы можете скачать библиотеку исходного кода оттуда и использовать ее в своем проекте, если вы найдете какую-либо из них полезной для вас.

Другие вопросы по тегам