HarmonyOS 鸿蒙Next md.digest 计算的消息摘要与JDK计算的值不一致
HarmonyOS 鸿蒙Next md.digest 计算的消息摘要与JDK计算的值不一致 有个特性需要计算文件的摘要信息。使用SHA-256算法做了计算,发现与java代码计算的结果不一致。
let md: cryptoFramework.Md;
try {
md = cryptoFramework.createMd('SHA256');
} catch (e) {
logger.error(TAG, 'createMd with SHA256 fail:' + JSON.parse(e));
expect(e).assertFail();
return;
}
let inputStream: fs.Stream | undefined = undefined;
try {
// let file = fs.openSync(filePath, fs.OpenMode.READ_ONLY);
inputStream = await fs.createStream(filePath, 'r+');
let readLen = 256;
let readSize = 0;
while (readLen > 0) {
let buf = new ArrayBuffer(readLen);
readLen = await inputStream.read(buf, {
offset: readSize
});
readSize += readLen;
// arkTS 计算的数据类型为 Uint8Array
let inputDataBlob: cryptoFramework.DataBlob = {
data: new Uint8Array(buf)
}
await md.update(inputDataBlob);
}
// 计算结果
let mdDigest = await md.digest();
public static byte[] computeHashOfFile(String fileLocation, String hashType) {
MessageDigest md;
byte[] hash = null;
try {
md = MessageDigest.getInstance(hashType);
} catch (NoSuchAlgorithmException e) {
return null;
}
try (InputStream fis = new FileInputStream(fileLocation)) {
int n = 0;
int readSize = 0;
while (n != -1) {
byte[] buffer = new byte[256];
n = fis.read(buffer);
if (n > 0) {
md.update(buffer, 0, n);
readSize += n;
}
}
hash = md.digest();
} catch (IOException e) {
}
return hash;
}
更多关于HarmonyOS 鸿蒙Next md.digest 计算的消息摘要与JDK计算的值不一致的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
吧主 这个问题解决了吗?我发现用cryptoFramework.createMd("SHA256"
)加密出来的结果跟android JDk不一致
更多关于HarmonyOS 鸿蒙Next md.digest 计算的消息摘要与JDK计算的值不一致的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
ArkTS代码有误,参照以下方式书写
try {
// let file = fs.openSync(filePath, fs.OpenMode.READ_ONLY);
inputStream = await fs.createStream(filePath, 'r+');
let readLen = 256;
let readSize = 0;
while (readLen > 0) {
let buf = new ArrayBuffer(readLen);
readLen = await inputStream.read(buf, {
offset: readSize
});
if (readLen > 0) {
let inputDataBlob: cryptoFramework.DataBlob = {
data: new Uint8Array(buf, 0, readLen)
}
await md.update(inputDataBlob);
readSize += readLen;
}
}
let mdDigest = await md.digest();
}
针对帖子标题中提到的“HarmonyOS 鸿蒙Next md.digest 计算的消息摘要与JDK计算的值不一致”的问题,以下是专业回答:
HarmonyOS与JDK在计算消息摘要时可能存在差异,这通常源于两者在哈希算法实现上的细微差别,或是输入数据的处理方式不同。首先,确认两者使用的哈希算法完全一致,例如都是SHA-256。其次,检查输入数据是否完全相同,包括编码方式和数据格式。
在HarmonyOS中,使用其提供的哈希算法API进行计算时,应确保遵循其特定的数据输入和输出规范。而JDK中的MessageDigest
类则有其自身的使用方式。如果算法和数据都确认无误,但结果仍不一致,可能是由于HarmonyOS的特定版本或JDK的特定版本中存在已知的算法实现问题。
建议直接对比两者的算法实现细节,或在HarmonyOS社区中查找是否有其他开发者遇到并解决了类似问题。同时,确认所使用的HarmonyOS和JDK版本是否都是最新且稳定的,以避免已知问题的干扰。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html