生成随机数并用RSA加密后进行编码的转换

生成随机数并用RSA加密后进行编码的转换

HarmonyOS
2024-05-28 21:18:12
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
kaijunx

本文主要介绍生成随机数,并用RSA加密后进行编码的转换。

  • 场景

随机数加密,确保数据在传输过程中的安全,并保证了重要密钥数据的安全性。

使用的核心API

随机数开发步骤

RSA加密

核心代码解释

1.创建一个AsyKeyGenerator实例。

2.创建Cipher实例。

3.使用createRandom创建随机数。

4.初始化Cipher实例,使用公钥对数据进行加密。

5.通过buffer.from对加密的数据进行编码的转换

核心代码如下:

import cryptoFramework from '@ohos.security.cryptoFramework' 
import { LoadType } from '@ohos/imageknife/GifWorker'; 
import buffer from '@ohos.buffer'; 
  
@Entry 
@Component 
  
struct RsaToRandom { 
  
  @State message: string = '随机数'; 
  @State randomText: string = '' 
  @State message1: string = '加密'; 
  private randomArray: Uint8Array|null = null 
  @State toRsa: string = '' 
  @State buf:string=""; 
  build() { 
    Row() { 
      Flex({direction:FlexDirection.Column,justifyContent:FlexAlign.Start,alignItems:ItemAlign.Center}){ 
        Text("生成随机数并用RSA加密") 
          .textAlign(TextAlign.Center) 
          .backgroundColor('#f3b7c4') 
          .border({ 
            width:1 
          }) 
          .width(240) 
          .height(50) 
          .margin({ 
            top:20 
          }) 
  
        Button(this.message) 
          .fontSize(20) 
          .fontWeight(FontWeight.Bold) 
          .backgroundColor(Color.Blue) 
          .onClick(()=>{ 
            this.randomArray= random(); 
            this.randomText = this.randomArray.toString(); 
            console.log("Test--"+this.randomArray) 
          }) 
          .margin({ 
            top:300 
          }) 
        Text(`${this.randomText}`) 
          .backgroundColor(Color.Orange) 
          .border({ 
            width:1 
          }) 
          .width(240) 
          .height(50) 
          .margin({ 
            top:20 
          }) 
        Button(this.message1) 
          .margin(10) 
          .onClick(async ()=>{ 
            let str=this.randomText; 
            console.log("str"+str) 
            this.toRsa=await Rsa(str) 
            this.buf=buffer.from(this.toRsa).toString('hex') 
            console.log(TAG+"toRsa"+this.buf) 
          }) 
        Text(`${this.buf}`) 
          .backgroundColor(Color.Orange) 
          .border({ 
            width:1 
          }) 
          .width(240) 
          .height(160) 
          .margin({ 
            top:10 
          }) 
      } 
      .width('100%') 
    } 
    .height('100%') 
  } 
} 
const TAG="Test--"; 
 function random(){ 
  let random:Uint8Array|null=null; 
  let rand=cryptoFramework.createRandom(); 
  let length=10; 
  let generateRandom=rand.generateRandomSync(length) 
  random=generateRandom.data; 
  console.log(TAG+"random:"+random); 
  return random; 
} 
  
async function Rsa(str:string){ 
  let result=''; 
  // 创建一个AsyKeyGenerator实例。 
  let rsaGenerator = cryptoFramework.createAsyKeyGenerator("RSA1024|PRIMES_2"); 
  // 创建Cipher实例。 
  let cipher = cryptoFramework.createCipher("RSA1024|PKCS1"); 
  // 使用AsyKeyGenerator实例生成非对称密钥对。 
  let keyGenPromise =  rsaGenerator.generateKeyPair(); 
  await keyGenPromise.then((rsaKeyPair: cryptoFramework.KeyPair): Promise<void> => { 
    let pubKey = rsaKeyPair.pubKey; 
    // 初始化Cipher实例,使用公钥对数据进行加密。 
    return cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, pubKey, null); 
  }).then(() => { 
    let input: cryptoFramework.DataBlob = { data: stringToUint8Array(str) }; 
    return cipher.doFinal(input); 
  }).then(dataBlob => { 
    result=dataBlob.data.toString(); 
    // 获取加密数据。 
    console.info(TAG+"EncryptOutPut is " + result); 
  }); 
   return result; 
} 
  
function stringToUint8Array(str: string) { 
  let arr = new Uint8Array(str.length); 
  for (let i = 0, j = str.length; i < j; ++i) { 
    arr[i] = str.charCodeAt(i); 
  } 
  return arr; 
}

实现效果

适配的版本信息

  • IDE:DevEco    Studio 4.0.1.601
  • SDK:HarmoneyOS    4.0.10.11
分享
微博
QQ
微信
回复
2024-05-29 22:24:35
相关问题
在Hi3861怎么获取一个随机数
10245浏览 • 1回复 已解决
RSA NoPadding模式加密失败
592浏览 • 1回复 待解决
SM3摘要算法对明文进行编码转换
379浏览 • 1回复 待解决
如何生成随机uuid,有哪位知道啊?
841浏览 • 1回复 待解决
如何实现RSA公钥PK加密一段文字
196浏览 • 1回复 待解决
如何通过uuid生成、md5、RSA、AES、 DES
611浏览 • 1回复 待解决
如何对常见密钥进行格式转换
248浏览 • 1回复 待解决
关系型数据库rdb中如何进行加密
645浏览 • 1回复 待解决
如何进行base64编码,有人知道吗?
225浏览 • 1回复 待解决
tp5 如何对post传参进行加密
836浏览 • 1回复 待解决
eTS中如何进行时间与字符串转换
2700浏览 • 1回复 待解决