HarmonyOS 鸿蒙Next中纯仓颉开发,md5加密结果和ios的不一致

HarmonyOS 鸿蒙Next中纯仓颉开发,md5加密结果和ios的不一致 字符串 123456

IOS 加密后为

e1adc3949ba59abbe56e057f2f883e

仓颉加密后

e10adc3949ba59abbe56e057f20f883e
  1. import crypto.digest.*
  2. import std.convert.*
  3. import std.crypto.digest.*
  4. import encoding.hex.*
  5. main() {
  6. var str: String = “helloworld”
  7. var md5Instance = MD5()
  8. var md: Array<Byte> = digest(md5Instance, str)
  9. var result: String = toHexString(md)
  10. println(result)
  11. return 0
  12. }

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

6 回复

这边看了下,应该是你IOS加密的问题吧,IOS的加密少了两位,正常MD5加密应该是32位或者16位,你可以看下在线MD5加密的工具加密出来和仓颉MD5也是一样的,建议排查下IOS这边。

更多关于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编码,而仓颉代码可能默认使用其他编码方式。

建议检查以下几点:

  1. 确保字符串编码一致,在仓颉中明确指定UTF-8编码
  2. 验证字节数组到十六进制字符串的转换逻辑
  3. 确认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等其他平台结果一致。

回到顶部