Spec-Zone.ru › D

std.digest.ripemd

Вычисляет хэши RIPEMD-160 произвольных данных. Хэши RIPEMD-160 представляют собой величины из 20 байтов, которые похожи на контрольную сумму или CRC, но более устойчивы.

Категория Функции
API шаблонов RIPEMD160
API объектно-ориентированного программирования RIPEMD160Digest
Вспомогательные функции ripemd160Of

Этот модуль соответствует API, определенным в std.digest. Чтобы понять различия между API шаблонов и API объектно-ориентированного программирования, см. std.digest.

Этот модуль открыто импортирует std.digest и может использоваться как автономный модуль.

Лицензия:
Boost License 1.0.
CTFE
Хэширование не работает в CTFE
Авторы:
Kai Nacke
Алгоритм был разработан Хэнсом Доббертином, Антоном Босселаерсом и Бартом Пренеэлом.
Реализация D — это прямой перевод реализации на ANSI C, разработанной Антоном Босселаерсом.
Ссылки
  • Функция хэширования RIPEMD-160
  • Википедия о RIPEMD-160
Исходный код
std/digest/ripemd.d
Примеры:
//Template API
import std.digest.md;

ubyte[20] hash = ripemd160Of("abc");
writeln(toHexString(hash)); // "8EB208F7E05D987A9B044A8E98C6B087F15A0BFC"

//Feeding data
ubyte[1024] data;
RIPEMD160 md;
md.start();
md.put(data[]);
md.start(); //Start again
md.put(data[]);
hash = md.finish();
Примеры:
//OOP API
import std.digest.md;

auto md = new RIPEMD160Digest();
ubyte[] hash = md.digest("abc");
writeln(toHexString(hash)); // "8EB208F7E05D987A9B044A8E98C6B087F15A0BFC"

//Feeding data
ubyte[1024] data;
md.put(data[]);
md.reset(); //Start again
md.put(data[]);
hash = md.finish();
struct RIPEMD160;

Реализация RIPEMD160 API шаблонов. См. std.digest для различий между шаблонами и API объектно-ориентированного программирования.

Примеры:
//Simple example, hashing a string using ripemd160Of helper function
ubyte[20] hash = ripemd160Of("abc");
//Let's get a hash string
writeln(toHexString(hash)); // "8EB208F7E05D987A9B044A8E98C6B087F15A0BFC"
Примеры:
//Using the basic API
RIPEMD160 hash;
hash.start();
ubyte[1024] data;
//Initialize data here...
hash.put(data);
ubyte[20] result = hash.finish();
Примеры:
//Let's use the template features:
void doSomething(T)(ref T hash)
if (isDigest!T)
{
    hash.put(cast(ubyte) 0);
}
RIPEMD160 md;
md.start();
doSomething(md);
writeln(toHexString(md.finish())); // "C81B94933420221A7AC004A90242D8B1D3E5070D"
Примеры:
//Simple example
RIPEMD160 hash;
hash.start();
hash.put(cast(ubyte) 0);
ubyte[20] result = hash.finish();
writeln(toHexString(result)); // "C81B94933420221A7AC004A90242D8B1D3E5070D"
pure nothrow @nogc @trusted void put(scope const(ubyte)[] data...);

Используйте это для подачи данных в хэш-функцию. Также реализует интерфейс std.range.primitives.isOutputRange для ubyte и const(ubyte)[].

Пример
RIPEMD160 dig;
dig.put(cast(ubyte) 0); //single ubyte
dig.put(cast(ubyte) 0, cast(ubyte) 0); //variadic
ubyte[10] buf;
dig.put(buf); //buffer
pure nothrow @nogc @safe void start();

Используется для (пере)инициализации хэша RIPEMD160.

Примечание
Для этой реализации RIPEMD160 вызов start после создания по умолчанию не требуется. Вызов start необходим только для сброса хэша.
Общий код, который работает с различными типами хэшей, должен всегда вызывать start.
Пример
RIPEMD160 digest;
//digest.start(); //Not necessary
digest.put(0);
pure nothrow @nogc @trusted ubyte[20] finish();

Возвращает завершенный хэш RIPEMD160. Это также вызывает start для сброса внутреннего состояния.

Пример
//Simple example
RIPEMD160 hash;
hash.start();
hash.put(cast(ubyte) 0);
ubyte[20] result = hash.finish();
assert(toHexString(result) == "C81B94933420221A7AC004A90242D8B1D3E5070D");
auto ripemd160Of(T...)(T data);

Это удобный псевдоним для std.digest.digest с использованием реализации RIPEMD160.

Примеры:
ubyte[20] hash = ripemd160Of("abc");
writeln(hash); // digest!RIPEMD160("abc")
alias RIPEMD160Digest = std.digest.WrapperDigest!(RIPEMD160).WrapperDigest;

Реализация RIPEMD160 API объектно-ориентированного программирования. См. std.digest для различий между шаблонами и API объектно-ориентированного программирования.

Это псевдоним для std.digest.WrapperDigest!RIPEMD160, см. там для получения дополнительной информации.

Примеры:
//Simple example, hashing a string using Digest.digest helper function
auto md = new RIPEMD160Digest();
ubyte[] hash = md.digest("abc");
//Let's get a hash string
writeln(toHexString(hash)); // "8EB208F7E05D987A9B044A8E98C6B087F15A0BFC"
Примеры:
//Let's use the OOP features:
void test(Digest dig)
{
  dig.put(cast(ubyte) 0);
}
auto md = new RIPEMD160Digest();
test(md);

//Let's use a custom buffer:
ubyte[20] buf;
ubyte[] result = md.finish(buf[]);
writeln(toHexString(result)); // "C81B94933420221A7AC004A90242D8B1D3E5070D"

© 1999–2021 The D Language Foundation
Licensed under the Boost License 1.0.
https://dlang.org/phobos/std_digest_ripemd.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API