2015-10-07 3 views
3

Что делает SHA1Managed.Initialize() на самом деле делаете? Когда нужно называть это? The documentation очень редкий.(Когда) Необходимо ли вызвать SHA1Managed.Initialize()?

+1

Похоже, он просто обнуляет внутренний буфер, если область памяти содержит конфиденциальные данные: http://referencesource.microsoft.com/#mscorlib/system/security/cryptography/sha1managed.cs,e228b8e0c77ca9b1 – cubrr

ответ

3

проверки декомпилированный кода, он просто очищает вне buffer и expandedBuffer байтовые массивы:

public override void Initialize() 
{ 
    this.InitializeState(); 
    Array.Clear((Array) this._buffer, 0, this._buffer.Length); 
    Array.Clear((Array) this._expandedBuffer, 0, this._expandedBuffer.Length); 
} 

Для краткости, в InitializeState метод, который также называют в конструкторе:

private void InitializeState() 
{ 
    this._count = 0L; 
    this._stateSHA1[0] = 1732584193U; 
    this._stateSHA1[1] = 4023233417U; 
    this._stateSHA1[2] = 2562383102U; 
    this._stateSHA1[3] = 271733878U; 
    this._stateSHA1[4] = 3285377520U; 
} 

Нет необходимо позвонить Initialize по строительству. Похоже на кнопку сброса.

0

От CoreCLR:

[System.Security.SecuritySafeCritical] // auto-generated 
    public override void Initialize() { 
     if (_safeHashHandle != null && !_safeHashHandle.IsClosed) 
      _safeHashHandle.Dispose(); 

     // _CreateHash will check for failures and throw the appropriate exception 
     _safeHashHandle = Utils.CreateHash(Utils.StaticProvHandle, Constants.CALG_SHA1); 
    } 

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

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