首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ceylon中的加密散列

Ceylon中的加密散列
EN

Stack Overflow用户
提问于 2018-04-08 18:41:35
回答 1查看 60关注 0票数 1

导入标准加密散列(消息摘要)库(MD5、SHA1、SHA2、SHA256、SHA3等)的推荐方式是什么?在锡兰?

EN

回答 1

Stack Overflow用户

发布于 2018-04-08 22:48:19

SDK中似乎没有密码学模块。

Github上有Ceylon Crypto (作为3个独立的模块in Herd),但它在自述文件中写道:

注意到IANAC (我不是密码学家),所以这肯定会在一些与安全相关的方面存在缺陷。

不要在生产中使用,也不要以任何昂贵的方式依赖它!

如果您只想在JVM中使用它,我建议在java.security (对于散列函数应该足够了)或javax.crypto (对于其他东西,比如密码)中使用Java的crypto API。

下面是一个计算Hello World的SHA-256的例子

module.ceylon:

代码语言:javascript
复制
native("jvm")
module example "1.0.0" {
    import java.base "8";
}

run.ceylon:

代码语言:javascript
复制
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``");
}

此程序输出以下内容:

代码语言:javascript
复制
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

我没有找到一个锡兰包装,这将使它更好一点,虽然。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49717005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档