HarmonyOS鸿蒙Next中如何实现与iOS、安卓版本相同的MD5加密效果?
HarmonyOS鸿蒙Next中如何实现与iOS、安卓版本相同的MD5加密效果?
当前app中用接口安全校验用了md5加密方式,但是加密结果和直接调用crypto-js中MD5的加密结果不一致,不知道当前app中MD5的加密效果用在鸿蒙中怎么实现,现在附上iOS、安卓版本MD5方法实现,帮忙提供下在鸿蒙中应该如何实现相同的加密效果,当前鸿蒙Md5的加密方法也提供在附件中,比如对字符串 “299ca90913f94fa598782952db1479682024-07-19 151721375617791937300crm.BITauto>COM” 的加密结果,当前iOS、安卓中得到的加密结果是 “10cdd15d6255ae1b2e5362e148ba194c”
更多关于HarmonyOS鸿蒙Next中如何实现与iOS、安卓版本相同的MD5加密效果?的实战教程也可以访问 https://www.itying.com/category-93-b0.html
请提供iOS 安卓的加密方式,是16进制还是base64格式,还是其它
// 可参考以下代码:
function doMdByPromise() {
// 摘要算法名称。
let mdAlgName = 'MD5';
// 要进行摘要的数据。
let message = 'Hello';
let md = cryptoFramework.createMd(mdAlgName);
console.info("[Promise]: Md algName is: " + md.algName);
let promiseMdUpdate = md.update({ data: stringToUint8Array(message) });
promiseMdUpdate.then(() => {
// 调用 digest() 以返回结果。
let promiseMdDigest = md.digest();
return promiseMdDigest;
}).then(digestOutput => {
let mdOutput = digestOutput.data;
let str2 = uint8ArrayToHexStr(mdOutput);
console.info("[Promise]: MD result: " + mdOutput);
let mdLen = md.getMdLength();
console.info("[Promise]: MD len: " + mdLen);
}).catch((error: BusinessError) => {
console.error("[Promise]: error: " + error.message);
});
}
// 摘要结果是 Uint8Array 类型,转换得到十六进制字符串数据
function uint8ArrayToHexStr(data: Uint8Array): string {
let hexString = '';
for (let i = 0; i < data.length; i++) {
let char = ('00' + data[i].toString(16)).slice(-2);
hexString += char;
}
return hexString;
}
function stringToUint8Array(str: string) {
let arr = new Uint8Array(str.length);
for (let i = 0, j = str.length; i < j; ++i) {
arr[i] = str.charCodeAt(i);
}
return arr;
}
// 参考下面:传入 into 即可
function mdBySync(into: string): string {
let md = cryptoFramework.createMd('MD5');
md.updateSync({ data: new Uint8Array(buffer.from(into, 'utf-8').buffer) });
let mdOutput = md.digestSync();
let str2 = uint8ArrayToHexStr(mdOutput.data);
console.info('[Sync]: MD result: ' + mdOutput.data);
console.info('[Sync]: MD len: ' + md.getMdLength());
return str2;
}
更多关于HarmonyOS鸿蒙Next中如何实现与iOS、安卓版本相同的MD5加密效果?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
ios 或者Android 应该不止MD5加密吧. 直接加密不会是"10cdd15d6255ae1b2e5362e148ba194c",
此外加密字符串, 最好用代码的格式增加以下, 否则可能有空格啥的, 影响结果.
ps: 没见附件内容.
这个与鸿蒙系统没啥关系, 如果使用了crypto-js 则加密主要由 crypto-js库负责实现.
猜测大概率拼接加密字符串的顺序, 或者内容不对. 如果对的话md5 应该是一样的. 可以通过 在线的工具网站 如https://www.toolhelper.cn/DigestAlgorithm/MD5 来和本地解密结果对比。
在HarmonyOS鸿蒙Next中实现与iOS、安卓版本相同的MD5加密效果,可以使用鸿蒙提供的cryptoFramework
模块。该模块提供了多种加密算法,包括MD5。以下是一个简单的示例代码,展示如何在鸿蒙Next中使用MD5进行加密:
import cryptoFramework from '@ohos.security.cryptoFramework';
async function md5Encrypt(input: string): Promise<string> {
// 创建MD5实例
let md5 = cryptoFramework.createMd();
// 初始化
await md5.init();
// 输入数据
let inputArray = new Uint8Array(new TextEncoder().encode(input));
await md5.update(inputArray);
// 获取加密结果
let md5Output = await md5.doFinal();
let result = Array.from(md5Output).map(b => b.toString(16).padStart(2, '0')).join('');
return result;
}
// 使用示例
md5Encrypt('Hello, HarmonyOS').then(result => {
console.log('MD5加密结果:', result);
});
上述代码中,cryptoFramework.createMd()
用于创建MD5实例,init()
进行初始化,update()
输入待加密的数据,doFinal()
获取加密结果。最后将结果转换为十六进制字符串输出。
通过这种方式,你可以在鸿蒙Next中实现与iOS、安卓相同的MD5加密效果。
在HarmonyOS鸿蒙Next中实现与iOS、安卓相同的MD5加密效果,可以使用Java标准库中的MessageDigest
类。以下是示例代码:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Util {
public static String md5(String input) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] messageDigest = md.digest(input.getBytes());
StringBuilder hexString = new StringBuilder();
for (byte b : messageDigest) {
hexString.append(String.format("%02x", b));
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
}
这段代码在HarmonyOS中生成与iOS、安卓相同的MD5哈希值。