2016-04-15 2 views
1

Ниже функцией является основным дешифрования рутиной из унаследованного приложения, написанного на Delphi 2007.Функция возвращает различные результаты

function TMainFrm.DecodePsw(Passw : String) : String; 
var 
    i : Integer; 
    ss : String; 
Begin 
    ss := Passw; 
    for i:=1 to Length(ss) do begin 
    ss[i] := Chr(Ord(ss[i]) - i*21 + 15); 
    end;  
    Result := ss; 
end; 

На некоторых клиентских компьютерах она возвращает другой результат с теми же входными данными, что может быть возможные причины этого?

ответ

3

Проблема заключается в том, что это относится к строке, как к массиву байтов. Но значение строки также зависит от предполагаемой кодировки. И поскольку вы используете строки ANSI, ваши байт-массивы будут интерпретироваться так, как если бы они были закодированы во всех существующих языковых стандартах. Таким образом, один и тот же массив байтов интерпретируется одним способом в локали Windows 1252, другим способом в локали Windows 1251 и т. Д.

Именно поэтому ваш код ведет себя по-разному на разных машинах. Именно то, как вы должны решить свою проблему, я не могу сказать с ограниченной информацией. Я бы сказал, что то, что у вас здесь, не то, что я бы назвал шифрованием, но я думаю, вы это знаете. Я бы также предположил, что необычно расшифровывать пароли. Это считается плохой практикой.

+0

Я подозревал местонахождение, однако, посмотрев в настройках Windows, я мог найти только туманную ссылку для локали системы в разделе Region -> Administrative -> Change System Locale ... Я сравнил эти настройки с другим компьютером, работающим на том же сайте и он был идентичен. Вы конкретно упомянули строки ANSI в приведенном выше ответе, из-за Delphi 2007, означает ли это, что это не будет проблемой для Unicode? –

+0

Вы уверены? Это Delphi 2007, а Chr/Ord - просто простые ролики. В 2007 году не было понятия о строковых локалях. – gabr

+2

@gabr как байтовые массивы, это правда. Но поскольку текст, отображаемый на экране, говорит, что значение языкового стандарта –

Смежные вопросы