Это ИСПОРТИЛО 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;
}
Ну, во-первых, вы не используете сеттер. То, что вы делаете, - это использование геттера (который захватывает копию ключа) и установка отдельных байтов в копии массива ключей, возвращаемой геттером (что не повлияет на внутреннее состояние AesCryptoServiceProvider
).
Если вы хотите, чтобы сеттер работал правильно, создайте новый массив байтов
и установите свойство:
byte[] newKey = new byte[aes.KeySize / 8];
// generate your key...
aes.Key = newKey;
Ваш пример полностью в управляемом коде, и вы возвращаете прямая ссылка на массив байтов DummyArray
явным образом, поэтому, естественно, вы можете установить любой индекс, который вы выберете, потому что вы решили вернуть ссылку. Однако нет требования, в котором говорится, что вы должны возвращать ссылку на массив байтов (это деталь реализации).
Управляемые CSP просто обертывают вызовы неуправляемого CAPI , поэтому, когда данные упорядочиваются, все, что вы получаете, - это копия фактических данных.