Почему установленный ключ ничего не делает в AES/SymmetricAlgorithm?

Это ИСПОРТИЛО ME трудно. Я думал, что устанавливал ключ, но я не был. Никакие исключения, ничего не происходит кроме плохих результатов. Почему там метод set, если все проигнорировано, и никакие исключения не выдаются, когда я пытаюсь записать? Какой смысл метода set на свойстве Keys?

Когда я делаю ниже Значения ключа, не изменяются. После часа, когда я понимаю то, что происходило, я записал цикл для проверки. Я также попробовал AES. Ключ [0] = val; var b = val == AES. Ключ [0]; (и смешанный с ним в непосредственном режиме).

Почему это имеет это поведение?

Array.Copy(myKey, aes.Key, aes.Key.Length);

int i = 0;
foreach (var v in aes.Key)
{
    var b = myKey[i++] == v;
    if (!b)
        b = b;
}
1
задан 14 June 2010 в 22:30
поделиться

1 ответ

Ну, во-первых, вы не используете сеттер. То, что вы делаете, - это использование геттера (который захватывает копию ключа) и установка отдельных байтов в копии массива ключей, возвращаемой геттером (что не повлияет на внутреннее состояние AesCryptoServiceProvider ).

Если вы хотите, чтобы сеттер работал правильно, создайте новый массив байтов и установите свойство:

byte[] newKey = new byte[aes.KeySize / 8];
// generate your key...
aes.Key = newKey;

Ответ на комментарий:

Ваш пример полностью в управляемом коде, и вы возвращаете прямая ссылка на массив байтов DummyArray явным образом, поэтому, естественно, вы можете установить любой индекс, который вы выберете, потому что вы решили вернуть ссылку. Однако нет требования, в котором говорится, что вы должны возвращать ссылку на массив байтов (это деталь реализации).

Управляемые CSP просто обертывают вызовы неуправляемого CAPI , поэтому, когда данные упорядочиваются, все, что вы получаете, - это копия фактических данных.

2
ответ дан 2 September 2019 в 23:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: