在Ceylon中导入标准加密散列(消息摘要)库(MD5,SHA1,SHA2,SHA256,SHA3等)的推荐方法是什么?
答案 0 :(得分:4)
SDK中似乎没有加密模块。
Github上有Ceylon Crypto(以及3个单独的模块in Herd),但它在README中说:
请注意IANAC(我不是密码学家),所以这肯定会以一些安全相关的方式存在缺陷。
不要在生产中使用,也不要以任何昂贵的方式依赖它!
如果您只是想在JVM中使用它,我建议在java.security中使用Java的加密API(对于散列函数应该足够)或javax.crypto(对于其他类似密码的东西)。< / p>
这是一个例子,计算Hello World
的SHA-256:
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
我没有为此找到锡兰包装,这会使它更好一些。