HarmonyOS 鸿蒙Next中纯仓颉开发,md5加密结果和ios的不一致
HarmonyOS 鸿蒙Next中纯仓颉开发,md5加密结果和ios的不一致 字符串 123456
IOS 加密后为
e1adc3949ba59abbe56e057f2f883e
仓颉加密后
e10adc3949ba59abbe56e057f20f883e
- import crypto.digest.*
- import std.convert.*
- import std.crypto.digest.*
- import encoding.hex.*
- main() {
- var str: String = “helloworld”
- var md5Instance = MD5()
- var md: Array<Byte> = digest(md5Instance, str)
- var result: String = toHexString(md)
- println(result)
- return 0
- }
IOS的
- (NSString *)MD5:(NSString *)string { const char *cStr = [string UTF8String]; unsigned char digest[CC_MD5_DIGEST_LENGTH]; CC_MD5(cStr,strlen(cStr),digest); NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++){ [output appendFormat:@"%x", digest[i]]; } return output; }
怎么转为仓颉的,我不会啊
更多关于HarmonyOS 鸿蒙Next中纯仓颉开发,md5加密结果和ios的不一致的实战教程也可以访问 https://www.itying.com/category-93-b0.html
老项目不敢动,呜呜,
这个只能打断点看看IOS这边是否做了特殊处理了,仓颉加密出来32位的应该是没问题的,看上去IOS这边是去掉了两个0,
是的,老项目了,几个平台加密都统一了,不敢大动,还好问题已经解决了,之前没注意到加密结果又转十六进制导致0没有了,感谢,
在鸿蒙Next纯仓颉语言开发中,MD5加密结果与iOS不一致的原因主要是两者使用的字符编码不同。鸿蒙默认采用UTF-8编码处理字符串,而iOS可能使用其他编码方式如UTF-16。此外,不同系统对换行符的处理也可能存在差异。确保双方使用相同的编码标准和对齐输入数据格式即可解决该问题。
在纯仓颉语言中,MD5加密结果与iOS不一致通常是由字符串编码或字节处理方式不同导致的。iOS代码使用UTF-8编码,而仓颉代码可能默认使用其他编码方式。
建议检查以下几点:
- 确保字符串编码一致,在仓颉中明确指定UTF-8编码
- 验证字节数组到十六进制字符串的转换逻辑
- 确认MD5算法的输入数据格式完全相同
对于字符串"123456",标准MD5结果应为"e10adc3949ba59abbe56e057f20f883e"。iOS代码显示的结果缺少部分字符,可能是输出格式问题。仓颉的结果是正确的标准MD5值。
在仓颉中,可以尝试明确指定编码:
var str: String = "123456"
var bytes: Array<Byte> = str.toUTF8Bytes()
var md5Instance = MD5()
var md: Array<Byte> = digest(md5Instance, bytes)
var result: String = toHexString(md)
这样应该能保证与iOS等其他平台结果一致。