Я хочу попытаться связать функцию API Windows CryptUnprotectData и .net SecureString вместе наилучшим образом. CryptUnprotectData возвращает структуру DATA_BLOB, состоящую из массива байтов и длины байта. В моей программе это будет строка Unicode UTF-16. SecureString имеет конструктор, который принимает символ * и длину Params, поэтому я хотел бы быть в состоянии сделать что-то вроде:Создать SecureString из неуправляемой строки unicode
SecureString ss = SecureString((char*)textBlob.pbData, textBlob.cbData/2);
Это работает, кроме UTF-16 является переменной длиной, так что я не знаю что использовать в качестве аргумента длины. В приведенном выше примере предполагается 2 байтовых символа (BMP), но для других плоскостей оно может составлять до 4 байтов. Мне нужно знать количество символов UTF-16 в массиве байтов. Каков наилучший способ сделать это, не копируя значения в памяти (тем самым угрожая безопасности). Я планирую обнулить и освободить массив байтов как можно быстрее.
Спасибо, много, Джон, это имеет смысл! Этот материал для меня все еще новенький. – Jarrod