【HarmonyOS NEXT】字符串含有中文时,使用MD5加密后的data和其他平台不一样,如何解决

 

【关键字】

字符串加密 / MD5 / Unicode编码

【问题描述】

如下代码中的data1,不包含中文时是正常的,包含中文时就和其它iOS、安卓后台MD5后的摘要结果不一致了,如何解决?

str = '中文就乱了,英文是正常的'
let md:cryptoFramework.Md =cryptoFramework.createMd("MD5");
let promiseMdUpdate:Promise<void> = md.update(GenDataBlob(16, str));
return promiseMdUpdate.then(() => {
let PromiseMdDigest = md.digest();
return PromiseMdDigest;
}).then(mdOutput => {
console.info("[Promise]: MD result: " + mdOutput.data);
let data1 = uint8ArrayToString(mdOutput.data)

let that = new util.Base64Helper();
let sigValue:string = that.encodeToStringSync(mdOutput.data);
return sigValue
}).catch((error:String) => {
console.error("[Promise]: error: " + error);
});

【解决方案】

请参考下面的处理方式解决:

// 字符串转成字节流
function stringToUint8Array(str: string) {
return new Uint8Array(buffer.from(str,'utf-8').buffer);
}
// 字节流转成可理解的字符串
function uint8ArrayToString(array: Uint8Array) {
// 将UTF-8编码转换成Unicode编码
let out: string = "";
let index: number = 0;
let len: number = array.length;
while (index < len) {
let character = array[index++];
switch (character >> 4) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
out += String.fromCharCode(character);
break;
case 12:
case 13:
out += String.fromCharCode(((character & 0x1F) << 6) | (array[index++] & 0x3F));
break;
case 14:
out += String.fromCharCode(((character & 0x0F) << 12) | ((array[index++] & 0x3F) << 6) | ((array[index++] & 0x3F) << 0));
break;
default:
break;
}
}
return out;
}
  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
***5加密,可以使用VBA宏来完成。VBA(Visual Basic for Applications)是一种在Microsoft Office套件中广泛使用的编程语言。下面是一个示例代码来实现在Word中使用VBA宏进行MD5加密的方法: 1. 打开Word文档,按下`Alt+F11`打开VBA编辑器。 2. 在VBA编辑器中,点击"插入"菜单,选择"模块",在新建的模块中输入以下代码: ```vba Function MD5Hash(ByVal input As String) As String Dim md5Obj As Object Dim bytes() As Byte Dim result() As Byte Dim i As Long ' 创建MD5对象 Set md5Obj = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider") ' 将输入转换为字节数组 bytes = StrConv(input, vbFromUnicode) ' 计算MD5哈希值 result = md5Obj.ComputeHash(bytes) ' 将字节数组转换为十六进制字符串 For i = 1 To LenB(result) MD5Hash = MD5Hash & LCase(Right("0" & Hex(AscB(MidB(result, i, 1))), 2)) Next i ' 释放对象 Set md5Obj = Nothing End Function ``` 3. 保存并关闭VBA编辑器。 4. 在Word文档中添加一个文本框或者输入框,用于输入要加密的内容。 5. 在文本框或者输入框的事件处理程序中调用上面定义的MD5Hash函数,并将结果显示出来。例如,可以在文本框或者输入框的"失去焦点"事件中添加以下代码: ```vba Private Sub TextBox1_LostFocus() Dim input As String Dim hashed As String ' 获取输入内容 input = TextBox1.Text ' 调用MD5Hash函数进行加密 hashed = MD5Hash(input) ' 将加密结果显示出来 MsgBox "MD5加密结果: " & hashed End Sub ``` 现在,当用户在文本框或者输入框中输入内容并失去焦点,会弹出一个消息框,其中显示了输入内容的MD5加密结果。请注意,在这个例子中,我使用了一个名为"TextBox1"的文本框作为输入框,你可以根据自己的需求修改代码。 希望以上信息能对您有所帮助。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [C++实现md5加密算法](https://download.csdn.net/download/q6115759/9807338)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [基于JAVA代码非的对称加密RSA的实现及其源代码](https://download.csdn.net/download/u012134073/88281987)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值