如何在Java中使用sha256散列一些字符串?有人知道这个免费图书馆吗?
我需要使用 React Native 计算 Android 和 iOS 中许多文件的 SHA256 哈希值。当用户选择文件时,我的应用程序将开始计算每个文件的 SHA256。
对于网页,我一直使用 crypto-js。但对于 Andoid 和 iOS 应用程序,我担心 crypto-js 的性能可能不够快,因为文件(例如视频文件)可能 >400 MB。
有什么方法可以调用 Android/iOS 原生 api 来计算 SHA256,而不是为了性能而使用 crypto-js 吗?
我们需要读取文件内容并将其转换为SHA256,然后将其转换为Base64.
任何指针或示例代码都足够了,因为我是这种加密机制的新手.
提前致谢.
所以,我正在使用Java验证Facebook的signed_request.不幸的是,我一直在遇到验证过程中的问题.我查看了这个文档,并模拟了他们的算法,但没有成功.我也遵循了本教程,并继续提出我的计算签名与Facebook发送的签名不同.
或者至少,这就是String.equals()告诉我的.
所以我决定再捅一下.
我将其设置为迭代计算签名中的字节和提供的字节.低,看,我的签名的前32个字节完全匹配他们.它只是缺少另外400多字节的数据.
那时,我觉得我应该更好地了解到底发生了什么.我查了一下SHA-256,发现确实只创建了32个字节的信息.那么我留下了超过400字节的数据,Facebook声称是使用HMAC SHA-256算法生成的.我想我应该比较SHA-256的最大长度与我散列数据的长度,但只是表明,有办法,方式,方法有很多剩余空间(邮件大小:575个字节;最大尺寸:2.305843009213694 x 10 ^ 18字节).
Facebook会搞砸吗?或者我错过了什么?
编辑
这是我用来散列数据的函数.我传入我的facebook密码(用于密钥)和base64url编码的JSON对象(用于数据).它始终返回长度为32的字节数组,其数据与facebook提供的签名的前32个字节相匹配.
private byte[] hmacSHA256(String data, String key) throws Exception {
SecretKeySpec secretKey = new SecretKeySpec(key.getBytes("UTF-8"), "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(secretKey);
mac.update(data.getBytes("UTF-8"));
byte[] hmacData = mac.doFinal();
return hmacData;
}
Run Code Online (Sandbox Code Playgroud) java ×4
sha256 ×2
cryptographic-hash-function ×1
cryptography ×1
cryptojs ×1
facebook ×1
hash ×1
hashcode ×1
md5 ×1
oracle11g ×1
react-native ×1
sha ×1