HarmonyOS开发实战:加密类组件使用方法-API

 加密类组件

模块介绍
RSA提RSA供生成密钥加解密验签等系列方法(基于HarmonyOS API)
AES提供AES生成密钥加解密等系列方法(基于HarmonyOS API)
DES提供3DES生成密钥加解密等系列方法(基于HarmonyOS API)
SM2提供SM2生成密钥加解密等系列方法(基于HarmonyOS API)
SM3提供SM3生成摘要,HMAC等系列方法(基于HarmonyOS API)
SM4提供SM4生成密钥加解密等系列方法(基于HarmonyOS API)
SHA提供SHA生成摘要,HMAC等系列方法(基于HarmonyOS API)
MD5提供MD5生成摘要等系列方法(基于HarmonyOS API)
ECDSA提供ECDSA签名验签等系列方法(基于HarmonyOS API)
ECDH提供ecdh动态协商密钥系列方法(基于HarmonyOS API)
X25519提供x25519动态协商密钥等系列方法(基于HarmonyOS API)
SM2Convert提供SM2ASN1与C1C3C2转换类

加密相关组件使用API

点击领取→纯血鸿蒙Next全套最新学习资料(安全链接,放心点击希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取~~!

1.RSA的方法【返回结果均为OutDTO对象】
  • generateRSAKey 生成1024位RSA的非对称密钥
const rsa = await RSA.generateRSAKey();console.error("generateRSAKey:" + rsa.getSuccess() + "---" + rsa.getMsg()+ "\n" + "公钥:" + rsa.getDataRow().publicKey + "私钥:" + rsa.getDataRow().privateKey)
  • generate2048RSAKey 生成2048位RSA的非对称密钥
const rsa = await RSA.generate2048RSAKey();console.error("generateRSAKey:" + rsa.getSuccess() + "---" + rsa.getMsg()+ "\n" + "公钥:" + rsa.getDataRow().publicKey + "私钥:" + rsa.getDataRow().privateKey)
  • encodePKCS1 1024位加密
let encode = await RSA.encodePKCS1('测试RSA-PKCS1加密字符串CSX~~', rsa.getDataRow().publicKey);this.message = encode.getDataRow();
  • encodePKCS1Segment 1024位分段加密
 let encode = await RSA.encodePKCS1Segment('测试RSA-PKCS1分段加密字符串CSX~~', rsa.getDataRow().publicKey);this.message = encode.getDataRow();
  • encode2048PKCS1 2048位加密
 let encode = await RSA.encode2048PKCS1('测试RSA-PKCS12048位加密字符串CSX~~', rsa.getDataRow().publicKey);this.message = encode.getDataRow();
  • encode2048PKCS1Segment 2048位分段加密
let encode = await RSA.encode2048PKCS1Segment('测试RSA-PKCS12048位分段加密字符串CSX~~', rsa.getDataRow().publicKey);this.message = encode.getDataRow();
  • decodePKCS1 1024位解密
 let decode = await RSA.decodePKCS1(encode.getDataRow(), rsa.getDataRow().privateKey);this.message = decode.getDataRow();
  • decodePKCS1Segment 1024位分段解密
 let decode = await RSA.decodePKCS1Segment(encode.getDataRow(), rsa.getDataRow().privateKey);this.message = decode.getDataRow();
  • decode2048PKCS1 2048位解密
 let decode = await RSA.decode2048PKCS1(encode.getDataRow(), rsa.getDataRow().privateKey);this.message = decode.getDataRow();
  • decode2048PKCS1Segment 2048位分段解密
let decode = await RSA.decode2048PKCS1Segment(encode.getDataRow(), rsa.getDataRow().privateKey);this.message = decode.getDataRow();
  • signPKCS1 1024位签名
  let sign = await RSA.signPKCS1('这个是RSA的验签字符串~~', rsa.getDataRow().privateKey);this.message = sign.getDataRow();
  • sign2048PKCS1 2048位签名
 let sign = await RSA.sign2048PKCS1('这个是RSA的2048位验签字符串~~', rsa.getDataRow().privateKey);this.message = sign.getDataRow();
  • verifyPKCS1 1024位验签
let verify = await RSA.verifyPKCS1(sign.getDataRow(), '这个是RSA的验签字符串~~', rsa.getDataRow().publicKey);this.message = verify.getMsg();
  • verify2048PKCS1 2048位验签
  let verify = await RSA.verify2048PKCS1(sign.getDataRow(), '这个是RSA的2048位验签字符串~~', rsa.getDataRow().publicKey);this.message = verify.getMsg();
  • pemToStrKey 将pem文件中的数据转换成公钥字符串支持1024/2048字节
//1024位示例//pem中数据支持没有回车符、换行符也支持每行以'\r\n'符结束let pubKey = RSA.pemToStrKey(`-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDhoZDHUVp7y2zw7T7SQYDiUQCnImnsKogqWOF3hBfaBr8xK/7I/PfbLcPV/MrWKPi2uaiXkhmITX+24ZWVBInxELBa4kccFJeZReMRmu7rKZgkVzU6JKyfaH8zMxipEBh0TyS6JVHHjPd4eezzzVDHc59OfYyzs3kM3Z6oczwTDwIDAQAB-----END PUBLIC KEY-----`);let encode = await RSA.encodePKCS1('测试RSA-PKCS1加密字符串CSX~~', pubKey);this.message = encode.getDataRow();let priKey = RSA.pemToStrKey(`-----BEGIN PRIVATE KEY-----MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAOGhkMdRWnvLbPDtPtJBgOJRAKciaewqiCpY4XeEF9oGvzEr/sj899stw9X8ytYo+La5qJeSGYhNf7bhlZUEifEQsFriRxwUl5lF4xGa7uspmCRXNTokrJ9ofzMzGKkQGHRPJLolUceM93h57PPNUMdzn059jLOzeQzdnqhzPBMPAgMBAAECgYEAjJjm5Kz3G0kJ25+ak94pd91N8Nfq9TUToH++D4GKc1vc68EkhQ3NTRDZhZB+vLDPOt26BqkNq/fO66DqWu93HErajBE4pZzCxmVmLanuimxiA45Td1DalL0mmd9ab2cusqwXo6LDs3mSU/t7gSBRUCntkv4MBZMgIDA92QSadHECQQD1HZKBIbWQtZ4nDxgaP1MOQC7dKmXlIkCsDbuwaZhjRM8/+iqBBtgSkviwOCDWNiFcpzf+nUM1+ba9OE9iTOqTAkEA66Z/ifnKVCNbHiW8i6E2K/2NcJH4qsxRrIMs+eyxqC/yEjkxol26OVmemxu22Fjkx/xIOKg6zFJRstXyi6P3FQJBAKZ7xINCwxCb2uSKowNI2X/HZk0/u9+qqSRzW3TR8/gQx3eb0fy7Ck1rV9BQ/zSfpX9J8IVWiU0C4/SXZ4vL1FMCQQCPaQh9I7NqeQne0wBnyXh6VRhaxbsb1rRt1Hbusol73ZHoXT5Dnd7TQCMyKi+ggpjYzEP3lwoRhpeJyoKNUP/xAkB+//w9SyKHWOZOCLj47/1/7YZGzKv/Ttb4NVFtqDPl2QtbXqDcP8d5ZI4p37rJIq1XZ0sTl2UgKQV+KZkPdL1n-----END PRIVATE KEY-----`)let decode = await RSA.decodePKCS1(encode.getDataRow(), priKey);this.message = decode.getDataRow();//2048位示例//pem中数据支持没有回车符、换行符也支持每行以'\r\n'符结束let pubKey = RSA.pemToStrKey(`-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1nwHtqSbMNwjHKutrLUI+dMBCtoRb/SSY00ujBMsNPFdERxaizxgWVZbypVqgj3/4ZsZw9R65OyQu6oLqjA9Wk2nVLpPRtZNjwJgNRB4pYKf+RmLn35UdpIQC9/1+UUeoelboLEMCamCeXPCT5dvxqVheO+S6IOLiN6XGbkNZM2VBNtmAhIUVDLct2yH5YbD6plC8Tg+iMbiigG7r7CsJE+Go5tb3BZjUYiF8fJ5ZKYCATkK4lO39rsXU8AAnw0duAq7LHk6xacwjyUA57S80S3LFHcOyP7UoNfQ+cbV/z+72sYJV4RwO6AeE2Muz8jYR1GlcCW1wYBGNOpyRVKg4QIDAQAB-----END PUBLIC KEY-----`);let encode = await RSA.encode2048PKCS1('测试2048位RSA-PKCS1加密字符串CSX~~', pubKey);this.message = encode.getDataRow();//2048位pem私钥let priKey = RSA.pemToStrKey(`-----BEGIN RSA PRIVATE KEY-----MIIEpAIBAAKCAQEA1nwHtqSbMNwjHKutrLUI+dMBCtoRb/SSY00ujBMsNPFdERxaizxgWVZbypVqgj3/4ZsZw9R65OyQu6oLqjA9Wk2nVLpPRtZNjwJgNRB4pYKf+RmLn35UdpIQC9/1+UUeoelboLEMCamCeXPCT5dvxqVheO+S6IOLiN6XGbkNZM2VBNtmAhIUVDLct2yH5YbD6plC8Tg+iMbiigG7r7CsJE+Go5tb3BZjUYiF8fJ5ZKYCATkK4lO39rsXU8AAnw0duAq7LHk6xacwjyUA57S80S3LFHcOyP7UoNfQ+cbV/z+72sYJV4RwO6AeE2Muz8jYR1GlcCW1wYBGNOpyRVKg4QIDAQABAoIBAB2ckhQNNb/RJKfYq+mkNNEI6KPu52llgrBi/4InQ3srt4WdPILsmwC6g4G8jy/cD2++UhhPRYhFgNXn7CRa9J17CxcPgdJt09dipJWu6HkxR5TEihpC/rZABCcfjH4VpN0FsrjEuLy8wl6yNKl4Zt4uBv8DVGz1fFYxJPtQKSE5YBSbvMD1thhViKOSyYp/pQfu00oz7/XK6iDEoHAhcdTBcBl9YW2WaXCnuX02FQkO5h8kjJbQd6pW4EfLLUxKjwcxcJ61DswcAaPwPN4+bgiwMak8H3IFrZVP24qs4ZOT3Yh7dl75OZXw7XcuBxsR/eCDlIe5VSSS+MIdJCc42uECgYEA8jbvO07ESaVYvdij21knF+5Tdjg5rG2q0qsocWlxsE+8IkjzRAgFoovXqwoyDkhFJ/1N/PEnBqiQngbUhRSst49ICCQVv+fzRX2WjUNg4k2FtLO0jwgLZ+E6grMkMkv7VDIxyWlY5rYUC1yw6USFjgyMGQaWps8o4+JLsGJd9PsCgYEA4rERecoYZndLRGmqMtmGZATDyNh6jGXzGF4XgHahnbhqgw3+7aTDXpA9W1TdGeBI4cQ9HQMjroJ+X/yx2JWysimnFxMXuU4eXZo3vMuebXB3lRe2QcloO1HobeSdUCosJ3qaKs+f3UtN9Q8ZiPb5P0tA/fIbe6cwwQTQ1FLbQtMCgYEA0DpD3lOv0bRRHxygeVEil6Muo0Jg6oh5Q5UbNqy0rSNPFJZsc/8FgSEBrqwcLkUZFvDf2+UhbMr7UK+Egkgs171Y6o7DF/D7JbF6/USAhOyqVpfrUM9UpuBs4bHKG2dQ0Kg6PvHPGMBNaRsth8x9mInW4yjT2OHdQFPqR9+48IMCgYBJXXkEa21+K/mGCJR2pIOj9w7N/5GZwpzsM/dzMfGYM8j05SCuFHbOMexJlKuB5l5wAqysqQlxPvZbZlLAf6I3mtdi1mEFLc0SCgkj5to9HPr2m5f2rpI3MIkCl8x510w28qzWUh+w5OA0AVEITLXZ0CcWiLZwTGmw7jgPn0kq1QKBgQDWDHZaEGCAYPxytix3tTCG3EIly8+fQJGt1lc0vgiiFcS0cW2pBbkorVvbu1gSJnmvj0dIObp55wwFBs30xEiMfli+83srOur6nxYUDgn9rqGcufn6hOeH++y1uOHhOenfUTy51Gy1Dlv+maJ3LZ0ZnqPnbBdhZ1RtXFnczVKeFg==-----END RSA PRIVATE KEY-----`)let decode = await RSA.decode2048PKCS1(encode.getDataRow(), priKey);
2.AES的方法【返回结果均为OutDTO对象】
  • generateAESKey 生成AES的对称密钥
 const aes = await  AES.generateAESKey();console.error("是否成功:" + aes.getSuccess() + "消息===:" + aes.getMsg() + "密钥======:", aes.getDataRow());
  • generateAESKey128 生成128位AES的对称密钥(1.1.12+)
 const aes = await  AES.generateAESKey128();console.error("是否成功:" + aes.getSuccess() + "消息===:" + aes.getMsg() + "密钥======:", aes.getDataRow());
  • encodeGCM 加密-GCM模式
  let encodeGCM = await AES.encodeGCM('测试加密字符串Test!', aes.getDataRow());this.message = encodeGCM.getDataRow();
  • decodeGCM 解密-GCM模式
let decodeGCM = await AES.decodeGCM(encodeGCM.getDataRow(), aes.getDataRow());this.message = decodeGCM.getDataRow();
  • encodeCBC 加密-CBC模式 需要传入iv偏移量字符串(IV生成详见RandomUtil)
  let encode = await AES.encodeCBC('测试CBC加密字符串Test!', aes.getDataRow(), iv.getDataRow());this.message = encode.getDataRow();
  • decodeCBC 解密-CBC模式 需要传入iv偏移量字符串(IV生成详见RandomUtil)
    let decode = await AES.decodeCBC(encode.getDataRow(),aes.getDataRow(), iv.getDataRow());this.message = decode.getDataRow();
  • encodeCBC128 加密-CBC模式-128位 需要传入iv偏移量字符串(IV生成详见RandomUtil)(1.1.13+)
 let encode = await AES.encodeCBC128('测试CBC加密字符串Test!','TESTsdiloia20230','ass3[2K8%fw68sw7');this.message = encode.getDataRow();
  • decodeCBC128 解密-CBC模式-128位 需要传入iv偏移量字符串(IV生成详见RandomUtil)(1.1.13+)
  let decode = await AES.decodeCBC128(encode.getDataRow(),'TESTsdiloia20230','ass3[2K8%fw68sw7');this.message = decode.getDataRow();
  • encodeECB 加密-ECB模式
let encode = await AES.encodeECB('此处为共享密钥加密的数据~~~~~~', aesKey);this.message = encode.getDataRow();
  • decodeECB 解密-ECB模式
 let decode = await AES.decodeECB(encode.getDataRow(), aesKey);this.message = decode.getDataRow();
  • encodeECB128 加密-ECB模式-128位(1.1.12+)
 let encode = await AES.encodeECB128('此处为共享密钥加密的数据~~~~~~', aesKey);this.message = encode.getDataRow();
  • decodeECB128 解密-ECB模式-128位(1.1.12+)
let decode = await AES.decodeECB128(encode.getDataRow(), aesKey);this.message = decode.getDataRow();
3.3DES的方法【返回结果均为OutDTO对象】
  • generate3DESKey 生成3DES的对称密钥
let des = await DES.generate3DESKey();console.error("是否成功:" + des.getSuccess() + "消息===:" + des.getMsg() + "密钥======:", des.getDataRow());
  • encodeECB 加密-ECB模式
let encodeECB = await DES.encodeECB('测试3DES-ECB加密字符串Test!', des.getDataRow());this.message = encodeECB.getDataRow();
  • decodeECB 解密-ECB模式
 let decodeECB = await DES.decodeECB(encodeECB.getDataRow(), des.getDataRow());this.message = decodeECB.getDataRow();
  • encodeCBC 加密-CBC模式 需要传入iv偏移量字符串(IV生成详见RandomUtil)
let encodeCBC = await DES.encodeCBC('测试3DES-CBC加密字符串Test!', des.getDataRow(), iv.getDataRow());this.message = encodeCBC.getDataRow();
  • decodeCBC 解密-CBC模式 需要传入iv偏移量字符串(IV生成详见RandomUtil)
 let decodeCBC = await DES.decodeCBC(encodeCBC.getDataRow(), des.getDataRow(), iv.getDataRow());this.message = decodeCBC.getDataRow();
4.SM2的方法【返回结果均为OutDTO对象】
  • generateSM2Key 生成SM2的非对称密钥
let sm2 = await SM2.generateSM2Key();console.error("generateSM2Key:" + sm2.getSuccess() + "---" + sm2.getMsg()+ "\n" + "公钥:" + sm2.getDataRow().publicKey + "私钥:" + sm2.getDataRow().privateKey)
  • encode 加密
let encode = await SM2.encode('测试SM2加密字符串CSX~~', sm2.getDataRow().publicKey);this.message = encode.getDataRow();
  • decode 解密
let decode = await SM2.decode(encode.getDataRow(), sm2.getDataRow().privateKey);this.message = decode.getDataRow();
  • sign 签名
let sign = await SM2.sign('这个是SM2的验签字符串~~', sm2.getDataRow().privateKey);this.message = sign.getDataRow();
  • verify 验签
 let verify = await SM2.verify(sign.getDataRow(), '这个是SM2的验签字符串~~', sm2.getDataRow().publicKey);this.message = verify.getMsg();
  • convertSM2PubKey 将服务器端生成的16进制的长度为130位的04开头的C1C3C2格式的SM2公钥转换为前端所需的ASN (1.1.9+)
 //C1C3C2格式的公钥字符串let pk = '04ba3bc3c5834d9ad1a7d81c4b49cf1209d2f28e4a97c73b75d6561792a2bfafe811e0284692006b0ce1b51f8aadfd65241d80eb979365048253408f5d705ec17b';//转换后的ASN.1格式的字符串let s = await SM2.convertSM2PubKey(pk);let code = await SM2.encode('加密字符~~~~~', s.getDataRow());let ddd = code.getDataRow();
  • convertSM2PriKey 将服务器端生成的16进制的长度为64位的C1C3C2格式的SM2私钥转换为前端所需的ASN (1.1.9+)
//C1C3C2格式的私钥字符串let pik = '7713d336bcbbffb8b7f9cab8db984a5c989a0b07697f569a06d5cd38e1351d07';//转换后的ASN.1格式的字符串let dc = await SM2.convertSM2PriKey(pik);let aaaa = await SM2.decode(ddd, dc.getDataRow());this.message = aaaa.getDataRow();
5.SM3的方法【返回结果均为OutDTO对象】
  • digest SM3摘要
let sm3 = await SM3.digest('使用SM3进行摘要数据~~~');this.message = sm3.getDataRow();
  • hmac 消息认证码计算
let hmac1 = await SM3.hmac('这个是SM3的HMAC~~~');this.message = hmac1.getDataRow();
6.SM4的方法【返回结果均为OutDTO对象】
  • generateSM4Key 生成SM4的对称密钥
 let sm4 = await SM4.generateSM4Key();console.error("是否成功:" + sm4.getSuccess() + "消息===:" + sm4.getMsg() + "密钥======:", sm4.getDataRow());
  • encodeECB 加密-ECB模式
let encodeECB = await SM4.encodeECB('测试SM4加密字符串Test!', sm4.getDataRow());this.message = encodeECB.getDataRow();
  • decodeECB 解密-ECB模式
  let decodeECB = await SM4.decodeECB(encodeECB.getDataRow(), sm4.getDataRow());this.message = decodeECB.getDataRow();
  • encodeCBC 加密-CBC模式 需要传入iv偏移量字符串(IV生成详见RandomUtil)
  let encodeCBC = await SM4.encodeCBC('测试SM4的CBC加密字符串Test!', sm4.getDataRow(), iv.getDataRow());this.message = encodeCBC.getDataRow();
  • decodeCBC 解密-CBC模式 需要传入iv偏移量字符串(IV生成详见RandomUtil)
  let decodeCBC = await SM4.decodeCBC(encodeCBC.getDataRow(), sm4.getDataRow(), iv.getDataRow());this.message = decodeCBC.getDataRow();
7.SHA的方法【返回结果均为OutDTO对象】
  • digest 摘要方法
let digest = await SHA.digest('这个是SHA的摘要方法~~');this.message = digest.getDataRow();
  • digestSHA1 SHA1摘要
let digest = await SHA.digestSHA1('这个是SHA的摘要方法~~');this.message = digest.getDataRow();
  • digestSHA224 SHA224摘要
let digest = await SHA.digestSHA224('这个是SHA的摘要方法~~');this.message = digest.getDataRow();
  • digestSHA384 SHA384摘要
 let digest = await SHA.digestSHA384('这个是SHA的摘要方法~~');this.message = digest.getDataRow();
  • digestSHA512 SHA512摘要
let digest = await SHA.digestSHA512('这个是SHA的摘要方法~~');this.message = digest.getDataRow();
  • hmac 消息认证码计算
let hmac2 = await SHA.hmac('这个是SHA的HMAC');this.message = hmac2.getDataRow();
8.MD5的方法【返回结果均为OutDTO对象】
  • digest 摘要方法
let md5 = await MD5.digest('使用MD5进行摘要~~~');this.message = md5.getDataRow();
9.ECDSA的方法【返回结果均为OutDTO对象】
  • generateECDSAKey 生成ECDSA的非对称密钥
let ecdsa = await ECDSA.generateECDSAKey();console.error("generateECDSAKey:" + ecdsa.getSuccess() + "---" + ecdsa.getMsg()+ "\n" + "公钥:" + ecdsa.getDataRow().publicKey + "私钥:" + ecdsa.getDataRow().privateKey)
  • sign 签名
  let sign = await ECDSA.sign('这个是ECDSA的验签字符串~~', ecdsa.getDataRow().privateKey);this.message = sign.getDataRow();
  • verify 验签
 let verify = await ECDSA.verify(sign.getDataRow(), '这个是ECDSA的验签字符串~~', ecdsa.getDataRow().publicKey);this.message = verify.getMsg();
10.ECDH的方法【返回结果均为OutDTO对象】
    //1.测试随机生成的一种256长度的字符串公私钥秘钥let ecdsa = await ECDSA.generateECDSAKey();//将对方的公钥和自己的私钥传入生成256位的共享秘钥let symKey = await ECDH.ecdh(ecdsa.getDataRow().publicKey, ecdsa.getDataRow().privateKey);//可以进行对称加密 注意对称加解密也需要为256位let encode = await CryptoUtil.encodeECB('测试共享密钥加密数据~~~', symKey.getDataRow(), 'AES256', 'AES256|ECB|PKCS7');this.message = encode.getDataRow();//对称解密let decode = await CryptoUtil.decodeECB(encode.getDataRow(), symKey.getDataRow(), 'AES256', 'AES256|ECB|PKCS7');this.message = decode.getDataRow();
    //2.测试随机生成的一种256长度的字节流Uint8Array形式的公私钥秘钥// 创建非对称密钥生成器let rsaGenerator = crypto.createAsyKeyGenerator('ECC256');// 通过非对称密钥生成器,随机生成非对称密钥let promiseKeyPair = await rsaGenerator.generateKeyPair();// 转换成可以读懂的公私钥字符串let pubKey = promiseKeyPair.pubKey.getEncoded().data;let priKey = promiseKeyPair.priKey.getEncoded().data;//获取到贡献密钥let symKey = await ECDH.ecdh(pubKey, priKey);//可以进行对称加密 注意对称加解密也需要为256位let encode = await CryptoUtil.encodeECB('测试共享密钥加密数据~~~', symKey.getDataRow(), 'AES256', 'AES256|ECB|PKCS7');this.message = encode.getDataRow();//对称解密let decode = await CryptoUtil.decodeECB(encode.getDataRow(), symKey.getDataRow(), 'AES256', 'AES256|ECB|PKCS7');this.message = decode.getDataRow();
  • ecdh 动态协商密钥,要求密钥长度为256位的非对称密钥
11.X25519的方法【返回结果均为OutDTO对象】
  • x25519 X25519动态协商密钥,要求密钥长度为256位的非对称密钥
    //1.测试随机生成的一种256长度的字符串公私钥秘钥let x25519Key = await CryptoUtil.generateCryptoKey('X25519');//将对方的公钥和自己的私钥传入生成256位的共享秘钥let x25519 = await X25519.x25519(x25519Key.getDataRow().publicKey, x25519Key.getDataRow().privateKey);this.message = x25519.getDataRow();//可以进行对称加密 注意对称加解密也需要为256位let encode = await CryptoUtil.encodeECB('测试共享密钥加密数据~~~', x25519.getDataRow(), 'AES256', 'AES256|ECB|PKCS7');this.message = encode.getDataRow();//对称解密let decode = await CryptoUtil.decodeECB(encode.getDataRow(), x25519.getDataRow(), 'AES256', 'AES256|ECB|PKCS7');this.message = decode.getDataRow();
    //2.测试随机生成的一种256长度的字节流Uint8Array形式的公私钥秘钥let rsaGenerator = crypto.createAsyKeyGenerator('X25519');// 通过非对称密钥生成器,随机生成非对称密钥let promiseKeyPair = await rsaGenerator.generateKeyPair();// 转换成可以读懂的公私钥字符串let pubKey = promiseKeyPair.pubKey.getEncoded().data;let priKey = promiseKeyPair.priKey.getEncoded().data;let x25519 = await X25519.x25519(pubKey, priKey);//可以进行对称加密 注意对称加解密也需要为256位let encode = await CryptoUtil.encodeECB('测试共享密钥加密数据~~~', x25519.getDataRow(), 'AES256', 'AES256|ECB|PKCS7');this.message = encode.getDataRow();//对称解密let decode = await CryptoUtil.decodeECB(encode.getDataRow(), x25519.getDataRow(), 'AES256', 'AES256|ECB|PKCS7');this.message = decode.getDataRow();

最后

有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?但是又不知道从哪里下手,而且学习时频繁踩坑,最终浪费大量时间。所以本人整理了一些比较合适的鸿蒙(HarmonyOS NEXT)学习路径和一些资料的整理供小伙伴学习

点击领取→纯血鸿蒙Next全套最新学习资料(安全链接,放心点击

希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!

一、鸿蒙(HarmonyOS NEXT)最新学习路线

有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,内容包含:(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)…等技术知识点。

获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

二、HarmonyOS Next 最新全套视频教程

三、《鸿蒙 (OpenHarmony)开发基础到实战手册》

OpenHarmony北向、南向开发环境搭建

《鸿蒙开发基础》

  • ArkTS语言
  • 安装DevEco Studio
  • 运用你的第一个ArkTS应用
  • ArkUI声明式UI开发
  • .……

《鸿蒙开发进阶》

  • Stage模型入门
  • 网络管理
  • 数据管理
  • 电话服务
  • 分布式应用开发
  • 通知与窗口管理
  • 多媒体技术
  • 安全技能
  • 任务管理
  • WebGL
  • 国际化开发
  • 应用测试
  • DFX面向未来设计
  • 鸿蒙系统移植和裁剪定制
  • ……

《鸿蒙进阶实战》

  • ArkTS实践
  • UIAbility应用
  • 网络案例
  • ……

四、大厂面试必问面试题

五、鸿蒙南向开发技术

六、鸿蒙APP开发必备

七、鸿蒙生态应用开发白皮书V2.0PDF


完整鸿蒙HarmonyOS学习资料,请点击→纯血版全套鸿蒙HarmonyOS学习资料

总结
总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。 

                        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/38498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蜜雪冰城小程序逆向

app和小程序算法一样 小程序是wasm

U-KAN环境搭建推理测试

引子 U-Net的鼎鼎大名,我觉得无需我多言了。图像分割和扩散概率模型的基石。作者探索了KANs在改进视觉任务 Backbone 网络方面的未开发潜力。作者研究、修改并重新设计已建立的U-Net Pipeline ,通过在标记化的中间表示上整合专用的KAN层,称之…

无线领夹麦克风可以唱歌吗?推荐多款收音好的无线麦克风

如今是一个短视频营销飞速发展的时代,越来越多自媒体人通过短视频的方式来进行直播带货、生活Vlog、线上K歌等,记录下生活里那美丽的瞬间。不过也有不少新手视频创作者存在疑问:无线领夹麦克风可以唱歌吗? 答案是可以的&#xff0…

SpringMvc 执行原理

当用户请求 会发送到前端控制器,DisptcherServlet根据请求参数生成代理请求,找到对应的实际控制器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视…

制定全面测试计划:使用TS-GNSS模拟器助力接收器选择

GPS/GNSS信号无处不在,也是目前定位导航应用中最为关键的一环,而GNSS接收器芯片组的低成本和高性能使得将GNSS接收器更容易得集成到以前从未有过的产品中去。由于存在以多种频率传输信号的多个GNSS星座,以及用于提高GNSS精度的各种可用技术&a…

Swift 新结构化并发中鲜为人知的 isolated 参数

概述 伴随着 Swift 5.5(WWDC21)推出的新结构化并发到今年的 WWDC 24 已经有 3 个多年头了。想必大家都对其中 async/awiat、async let、TaskGroup、Actor 等各种概念都了然于胸了吧? 不过小伙伴们可能不知道的是:新结构化并发&a…

骑行十里箐:风景,挑战与心灵,在幽谷中的协奏曲

2024年6月29日,星期六,一个看似平凡的日子,却因一次不同寻常的骑行而变得难以忘怀。作为校长骑行群的一员,我有幸参加了这次骑行十里箐的活动。从滇池后海的宁静开始,到宝珠山顶的壮观落幕,这一天的旅程充满…

ABeam×StartUp | ABeam德硕中国新创部门拜访通用机器人初创公司 :逐际动力,就具身智能机器人的发展展开交流

近日,ABeam中国新创部门有幸拜访了深圳逐际动力科技有限公司(以下简称:逐际动力)。作为一家通用机器人公司,其在人形机器人、四轮足机器人等领域具有深厚的学术与技术储备。 现场合影 左:ABeam中国新创部门…

Python | Leetcode Python题解之第201题数字范围按位与

题目&#xff1a; 题解&#xff1a; class Solution:def rangeBitwiseAnd(self, m: int, n: int) -> int:while m < n:# 抹去最右边的 1n n & (n - 1)return n

sheng的学习笔记-hive框架原理

需要学习的前置知识&#xff1a;hadoop 可参考 sheng的学习笔记-hadoop-CSDN博客 相关网址 官网&#xff1a;http://hive.apache.org 文档&#xff1a;https://cwiki.apache.org/confluence/display/Hive/GettingStarted https://cwiki.apache.org/confluence/display/Hive/…

Sermant自定义插件开发上手体验

作者&#xff1a;用友汽车信息科技&#xff08;上海&#xff09;有限公司 刘亚洲 Java研发工程师 一、研究缘由 由于目前我们所处的行业是汽车行业&#xff0c;项目上进行云服务的迁移时使用到了Sermant中的相关插件, 为了加深对Sermant开发和运行机制的了解&#xff0c;我…

线程、线程池与CompletableFuture线程编排

线程、线程池与CompletableFuture线程编排 1. 多线程的初始化方式1.1 简单实现多线程的启动方式(3种)1. 继承Thread实现2. 实现Runnable接口3. 实现callable接口(返回值)2. 基于线程池实现多线程的启动方式❤❤❤2.1 线程池创建与使用2.2 SpringBoot自定义线程池组件 ❤ ❤3. 多…

如何屏幕录制?这3款软件轻松实现!

随着科技的不断发展&#xff0c;屏幕录制成为了人们日常生活中越来越常见的需求。无论是录制游戏过程、分享教程、还是保存重要的在线会议&#xff0c;屏幕录制都是一个非常实用的工具。然而&#xff0c;很多用户却不知道如何屏幕录制。本文将详细介绍3款屏幕录制软件&#xff…

《梦醒蝶飞:释放Excel函数与公式的力量》7.3 RIGHT函数

第七章&#xff1a;文本处理函数 第三节&#xff1a;7.3 RIGHT函数 7.3.1. RIGHT函数简介 RIGHT函数用于从文本字符串的末尾提取指定数量的字符&#xff0c;适合在需要从文本中提取特定后缀或处理固定格式的数据时使用。 语法&#xff1a; RIGHT(text, [num_chars]) text…

探索ChatGPT是如何改变癌症护理

了解生成式人工智能&#xff08;尤其是 ChatGPT&#xff09;如何通过高级数据集成和个性化患者管理来增强诊断和治疗&#xff0c;从而改变癌症治疗。了解 Color Health 的创新副驾驶模型及其对早期检测和患者结果的影响。 近年来&#xff0c;人工智能与医疗保健的融合为癌症治疗…

机器学习中的数学底蕴与设计模式

在说机器学习设计模式之前&#xff0c;想多说几句&#xff0c;在进入软件行业最初的10年&#xff0c;那时候耳熟能详的基本就是多线程编程&#xff0c;互斥同步锁&#xff0c;设计模式&#xff0c;OOA&#xff0c;OOP&#xff0c;常规数组&#xff0c;tree&#xff0c;图的数据…

体验升级:扫描全能王智能高清滤镜2.0全面测评

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

【CT】LeetCode手撕—19. 删除链表的倒数第 N 个结点

题目 原题连接&#xff1a;19. 删除链表的倒数第 N 个结点 1- 思路 模式识别&#xff1a;删除倒数第 n 个结点 ——> 定义 dummyHead 并用双指针实现删除逻辑 2- 实现 ⭐19. 删除链表的倒数第 N 个结点——题解思路 class Solution {public ListNode removeNthFromEnd(Li…

React-Native优质开源项目

React Native 是一个由 Facebook 开发的开源框架&#xff0c;允许开发者使用 JavaScript 和 React 来构建原生移动应用。它允许开发者编写一次代码&#xff0c;然后可以在 iOS 和 Android 平台上运行&#xff0c;而无需为每个平台单独编写代码。以下是 React Native 的一些关键…

MySQL 高级SQL高级语句(二)

一.CREATE VIEW 视图 可以被当作是虚拟表或存储查询。 视图跟表格的不同是&#xff0c;表格中有实际储存数据记录&#xff0c;而视图是建立在表格之上的一个架构&#xff0c;它本身并不实际储存数据记录。 临时表在用户退出或同数据库的连接断开后就自动消失了&#xff0c;而…