能否提供一个关于SM3加密的demo?

能否提供一个关于SM3加密的demo?

HarmonyOS
2024-06-05 23:19:20
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
coolhead2000

SM3是一种摘要算法,可参考以下文档:摘要算法规格摘要算法开发步骤。如果数据过大可以采用分段摘要算法:分段摘要算法开发步骤

demo参考代码:

// 字符串转成字节流 
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; 
} 
 
let bodyStr='iajdisajdijadijsadahsjdhlkldkgl' 
 
// 以Promise方式完成摘要 
async function doSm3ByPromise() { 
  let TAG='Test-'; 
  let mdAlgName = 'SM3'; // 摘要算法名称。 
  let md = cryptoFramework.createMd(mdAlgName); 
  console.info('mdAlgName:'+ md.algName); 
  // 如果数据量较小,可以使用update()一次传递所有数据。输入参数的长度没有限制。 
  let promiseMdUpdate = md.update({ data: stringToUint8Array(bodyStr) }); 
  promiseMdUpdate.then(() => { 
    // 调用摘要()返回结果。 
    let PromiseMdDigest = md.digest(); 
    //console.log(“SM3:”+PromiseMdDigest); 
    return PromiseMdDigest; 
  }).then(digestOutput => { 
    let mdOutput = digestOutput; 
    console.info(TAG+'Result:' + mdOutput.data); 
    //转成16进制 
    let buf=buffer.from(mdOutput.data); 
    console.log(TAG+'Hex222:'+buf.toString('hex')); 
    let mdLen = md.getMdLength(); 
    console.info(TAG+"MDlength: " + mdLen); 
    //转成base64 
    let base64=new util.Base64Helper; 
    let priKeyBase64=base64.encodeToStringSync(mdOutput.data) 
    console.log(TAG+'base64:'+priKeyBase64) 
  }).catch((error: BusinessError) => { 
    console.error('error:' + error.message); 
  }); 
}
分享
微博
QQ
微信
回复
2024-06-06 23:05:04
相关问题
能否提供一个SM3加密案例
228浏览 • 1回复 待解决
SM3摘要算法对明文进行编码转换
350浏览 • 1回复 待解决
问大家一个问题,关于原服务
5521浏览 • 1回复 待解决
关于索引一个问题有懂吗?
1471浏览 • 1回复 待解决
提供一个简单示例
544浏览 • 1回复 待解决
需要提供c++到js通信demo
285浏览 • 1回复 待解决
有人知道关于demo吗?
386浏览 • 1回复 待解决