Как я хеширую строку с Delphi? [закрытый]

Поместите компонент в область видимости и избавьтесь от любой бизнес-логики в методах getter.

Компонент должен быть помещен в область представления, чтобы все предыдущие выборы и новые доступные элементы были запомнены, в противном случае что-то не удастся, если, например, rendered атрибут зависит от условия, которое было задано только в предыдущем запросе, или если JSF должен проверить выбранный элемент по списку доступных элементов.

Методы getter не должны содержать никакой бизнес-логики, поскольку они также будет использоваться во время ao фаза проверки. Вы должны использовать для выполнения бизнес-логики на основе изменения. Вы должны в методе слушателя также явно очистить выбранные значения дочерних выпадающих списков. Вы можете использовать для обновления содержимого дочерних выпадающих списков.

Таким образом, так:


    
    
    


    
    
    


    
    
    


    
    

с

@ManagedBean
@ViewScoped
public class Nodes {

    private String selectedState; // getter+setter
    private String selectedCity; // getter+setter
    private String selectedRegion; // getter+setter
    private String selectedStation; // getter+setter
    private List availableStates; // getter (no setter necessary!)
    private List availableCities; // getter (no setter necessary!)
    private List availableRegions; // getter (no setter necessary!)
    private List availableStations; // getter (no setter necessary!)

    @EJB
    private SomeService someService;

    @PostConstruct
    public void init() {
        availableStates = someService.listStates();
    }

    public void changeState(AjaxBehaviorEvent event) {
        availableCities = someService.listCities(selectedState);
        selectedCity = selectedRegion = selectedStation = null;
        availableRegions = availableStations = null;
    }

    public void changeCity(AjaxBehaviorEvent event) {
        availableRegions = someService.listRegions(selectedCity);
        selectedRegion = selectedStation = null;
        availableStations = null;
    }

    public void changeRegion(AjaxBehaviorEvent event) {
        availableStations = someService.listStations(selectedRegion);
        selectedStation = null;
    }

    // Generate necessary getters+setters here. You should not change them.
}

См. также:

24
задан devstopfix 14 February 2015 в 17:48
поделиться

5 ответов

Если Вы хотите обзор MD5 и имеете Инди установленные компоненты, можно сделать это:

uses SysUtils, IdGlobal, IdHash, IdHashMessageDigest;

with TIdHashMessageDigest5.Create do
try
    Result := TIdHash128.AsHex(HashValue('Hello, world'));
finally
    Free;
end;

самые популярные алгоритмы поддерживаются в Пакет Криптографии Дельфи :

  • Haval
  • MD4, MD5
  • RipeMD-128, RipeMD-160
  • SHA-1, SHA-256, SHA-384, SHA-512,
  • Обновление Tiger

DCPCrypt теперь сохраняется , Warren Postma и источник может быть найден здесь .

27
ответ дан Community 28 November 2019 в 22:25
поделиться

Если вы хотите, чтобы строка хеша MD5 была шестнадцатеричной, и у вас установлено Delphi XE 1 , то есть у вас есть компоненты Indy 10 .5.7, которые вы можете сделать это. :

использует IdGlobal, IdHash, IdHashMessageDigest;

class function getMd5HashString(value: string): string;
var
    hashMessageDigest5 : TIdHashMessageDigest5;
begin
    hashMessageDigest5 := nil;
    try
        hashMessageDigest5 := TIdHashMessageDigest5.Create;
        Result := IdGlobal.IndyLowerCase ( hashMessageDigest5.HashStringAsHex ( value ) );
    finally
        hashMessageDigest5.Free;
    end;
end;
16
ответ дан STB Land 28 November 2019 в 22:25
поделиться

Я обычно использую DCPCrypt2 ( Пакет Криптографии Дельфи ) от David Barton ( Город в Небе ).

Это, также содержит следующие Алгоритмы шифрования:

  • Шифр
  • Бросок 128
  • Бросок 256
  • DES, 3DES
  • Лед, Тонкий Лед, идея Ice2
  • Марс
  • Misty1
  • RC2, RC4, RC5, RC6
  • Rijndael (новая AES)
  • Змея
  • Чай
  • Обновление Twofish

DCPCrypt теперь сохраняется , Warren Postma и источник может быть найден здесь .

11
ответ дан Community 28 November 2019 в 22:25
поделиться

Это модификация ответа devstopfix, которая была принята.

В текущей версии Indy вы можете легко хешировать строки и потоки. Пример:

function MD5String(str: String): String;
begin
  with TIdHashMessageDigest5.Create do
    try
      Result := HashStringAsHex(str);
    finally
      Free;
    end;
end;

Используйте HashString, HashStringAsHex, HashBytes, HashBytesAsHex, HashStream, HashStreamAsHex. Преимущество заключается в том, что вы также можете указать кодировку текста

5
ответ дан StanE 28 November 2019 в 22:25
поделиться

Вы также можете использовать WindowsCrypto API с Delphi:

Там есть подразделение, которое оборачивает все CryptoAPI. Вы также можете использовать Lockbox, который теперь с открытым исходным кодом.

В конце концов, вы можете поддерживать практически любые алгоритмы хэширования с Delphi. Пример Indy, вероятно, ближе всего к Delphi, поскольку Indy включен в большинство версий Delphi. В остальном вам нужно будет либо использовать библиотеку, либо написать больше кода для доступа к CryptoAPI или реализовать его самостоятельно.

3
ответ дан Jim McKeeth 28 November 2019 в 22:25
поделиться
Другие вопросы по тегам:

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