Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,022   Сказал «Спасибо»: 609 раз Поблагодарили: 2365 раз в 1860 постах
|
Здравствуйте, КРИПТО-ПРО. Возможные значения имени контейнера: Цитата:[имя] - 8 первых символов имени контейнера; Для символов от 'a' до 'z', от 'A' до 'Z', от '0' до '9' и символа '-' симолы остаются без изменений, для отсальных символов происходит замена на символ с ASCII кодом вычисляемым по формула c%('z'-'a'+1)+'a', где c исходный симол имени контейнера. Не будем обращать на опечатки, которым не первый год, а попробуем воспроизвести для контейнера с именем из символа: П Код a - 97 Код z - 122 Код П - 207 Получаем: 207 % (122-97+1)+97 = 207 % 26 + 97 = 25 + 97 = 122 = z Открываю аплет КриптоПРО CSP, копирую контейнер с новым именем: П, получаю: f.000 Значит ли это, что в документации есть ошибки или у меня где-то в рассуждениях? Спасибо. |
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,022   Сказал «Спасибо»: 609 раз Поблагодарили: 2365 раз в 1860 постах
|
Опытным путем на русских буквах было получено "такое решение" (не использовать  , см. в следующем посте готовую реализацию):
Код:
function GetUniqueName(SourceName: ansistring): ansistring;
var
S: ansistring;
I, x: Integer;
begin
Result := '';
S := Copy(SourceName, 1, 8);
for I := 1 to Length(S) do
begin
case S[I] of
'a'..'z', 'A'..'Z', '0'..'9', '-': Result := Result + S[I];
' ': Result := Result + Chr(Ord(S[I]) mod 26 + 97);
'Ё': Result := Result +'b';
'ё': Result := Result +'d'
else
begin
if Ord(S[I]) < Ord('a') then
Result := Result + Chr(Ord(S[I]) mod 26 + 97)
else
begin
x := Ord(S[I]) mod 26 + 103;
if x > 122 then
x := x - 26;
Result := Result + Chr(x);
end;
end;
end;
end;
end;
Отредактировано пользователем 2 августа 2014 г. 21:47:19(UTC)
| Причина: Не указана |
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,022   Сказал «Спасибо»: 609 раз Поблагодарили: 2365 раз в 1860 постах
|
В цикле прошелся с 1 по 255 ASCII и создал контейнеры... Итоговая функция, без использования формулы: Смущает только: Код:
90: result := result + 'Z';
91: result := result + 'n';
// 92: Ошибка [2148073503]:Неправильный параметр набора ключей
93: result := result + 'p';
94: result := result + 'q';
Это специфика какая-то? Пробовал так: Код:
ContainerName := '\\.\FAT12_D\' + char(92);
и так: ContainerName := char(92); появляется диалог выбора носителя, указываю FAT12_D, возвращается при вызове CryptGetProvParam(..PP_UNIQUE_CONTAINER..) имя текущего пользователя ОС |
|
 2 пользователей поблагодарили Андрей * за этот пост.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,022   Сказал «Спасибо»: 609 раз Поблагодарили: 2365 раз в 1860 постах
|
Подсказали, код символа 92 - это \ Соответвенно, в этом и дело... |
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,421  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 38 раз Поблагодарили: 734 раз в 632 постах
|
Вот код: Русские символы представлены 2 байтами, поскольку используется wchar_t: Код:static SUP_INLINE TCHAR fat12_convert( int c )
{
if( c >= 'a' && c <= 'z' )
return (TCHAR)c;
if( c >= 'A' && c <= 'Z' )
return (TCHAR)c;
if( c >= '0' && c <= '9' )
return (TCHAR)c;
if( c == '-' )
return (TCHAR)c;
return (TCHAR)( ( (unsigned char)c ) % ( 'z' - 'a' + 1 ) + 'a' );
}
|
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,022   Сказал «Спасибо»: 609 раз Поблагодарили: 2365 раз в 1860 постах
|
Автор: maxdm  Вот код: Русские символы представлены 2 байтами, поскольку используется wchar_t: Код:static SUP_INLINE TCHAR fat12_convert( int c )
{
if( c >= 'a' && c <= 'z' )
return (TCHAR)c;
if( c >= 'A' && c <= 'Z' )
return (TCHAR)c;
if( c >= '0' && c <= '9' )
return (TCHAR)c;
if( c == '-' )
return (TCHAR)c;
return (TCHAR)( ( (unsigned char)c ) % ( 'z' - 'a' + 1 ) + 'a' );
}
хм... |
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,022   Сказал «Спасибо»: 609 раз Поблагодарили: 2365 раз в 1860 постах
|
|
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,421  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 38 раз Поблагодарили: 734 раз в 632 постах
|
Постараемся сделать более платформенно-независимое решение в 4.0 |
|
 1 пользователь поблагодарил Максим Коллегин за этот пост.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,022   Сказал «Спасибо»: 609 раз Поблагодарили: 2365 раз в 1860 постах
|
|
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,421  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 38 раз Поблагодарили: 734 раз в 632 постах
|
|
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close