Криптографическое хеширование на Цейлоне

Каков рекомендуемый способ импорта стандартных библиотек криптографического хеширования (дайджеста сообщений) (MD5, SHA1, SHA2, SHA256, SHA3 и т. Д.) В Цейлон?

1 ответ

Кажется, в SDK нет модуля криптографии.

На Github есть Ceylon Crypto (и как 3 отдельных модуля в Стаде), но в README говорится:

Обратите внимание, что IANAC (я не криптолог), так что это наверняка будет иметь недостатки в некотором отношении безопасности.

Не используйте в производстве и не полагайтесь на это каким-либо дорогим способом!

Если вы просто хотите использовать это в JVM, я бы предложил использовать только крипто-API Java в java.security (этого должно быть достаточно для хеш-функций) или javax.crypto (для других вещей, таких как шифры).

Вот пример расчета SHA-256 Hello World:

module.ceylon:

native("jvm")
module example "1.0.0" {
    import java.base "8";
}

run.ceylon:

import java.security {
    MessageDigest
}
import java.lang {
    JString=String,
    ByteArray
}

"Formats a single byte as a (two character) hexadecimal string."
String formatByte(Byte byte)
        => Integer.format(byte.unsigned, 16).padLeading(2, '0');

"Formats a Java byte array as a hexadecimal string."
String formatByteArray(ByteArray result)
        => String.sum(result.byteArray.map(formatByte));

"Calculates SHA-256('Hello World') and print it."
shared void run() {
    value message = "Hello World";
    value bytes = JString(message).getBytes("UTF-8");

    value dig = MessageDigest.getInstance("SHA-256");
    value result = dig.digest(bytes);

    value formatted = formatByteArray(result);
    print("Result: ``result.array```");
    print("Length: ``result.size``");
    print("Result in hex: ``formatted``");
}

Эта программа выводит это:

Result: { -91, -111, -90, -44, 11, -12, 32, 64, 74, 1, 23, 51, -49, -73, -79, -112, -42, 44, 101, -65, 11, -51, -93, 43, 87, -78, 119, -39, -83, -97, 20, 110 }`
Length: 32
Result in hex: A591A6D40BF420404A011733CFB7B190D62C65BF0BCDA32B57B277D9AD9F146E

Я не нашел для этого цейлонскую обертку, которая бы сделала его немного лучше.

Другие вопросы по тегам