Криптографическое хеширование на Цейлоне
Каков рекомендуемый способ импорта стандартных библиотек криптографического хеширования (дайджеста сообщений) (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
Я не нашел для этого цейлонскую обертку, которая бы сделала его немного лучше.