HarmonyOS鸿蒙Next中如何将Java的rsa签名翻译过来?
HarmonyOS鸿蒙Next中如何将Java的rsa签名翻译过来?
HarmonyOS如何将Java的中rsa签名翻译过来?
/**
* RSA验证签名
*
* @param plainBytes 需要签名的数据
* @param signedBytes 已经签名的数据
* @param PublicKey 公钥
* @return
* @throws Exception
*/
public static boolean verifyRSA(byte[] plainBytes, byte[] signedBytes, String PublicKey) throws Exception {
String SIGNATURE_ALGORITHM = "SHA1withRSA";
Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
signature.initVerify(getPublicKey(PublicKey));
signature.update(plainBytes);
//Base64编码
return signature.verify(android.util.Base64.decode(new String(signedBytes, APP_UNICODE_TYPE), android.util.Base64.NO_WRAP));
}
这是Java代码,在HarmonyOS上我没看到这种SHA1withRSA格式的
更多关于HarmonyOS鸿蒙Next中如何将Java的rsa签名翻译过来?的实战教程也可以访问 https://www.itying.com/category-93-b0.html
参考demo
import { cryptoFramework } from '@kit.CryptoArchitectureKit';
import { buffer, util } from '@kit.ArkTS';
@Entry
@Component
struct CryptPage {
@State message: string = '点击开始';
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(() => {
convertAsyKey()
})
}
.width('100%')
}
.height('100%')
}
}
export async function signMessagePromise(content: cryptoFramework.DataBlob, priKey: cryptoFramework.PriKey) {
let signAlg = "RSA2048|PKCS1|SHA1"; // 签名算法规格
let signer = cryptoFramework.createSign(signAlg);
await signer.init(priKey);
let signData = await signer.sign(content);
return signData;
}
export async function verifyMessagePromise(content: cryptoFramework.DataBlob, signMessageBlob: cryptoFramework.DataBlob, pubKey: cryptoFramework.PubKey) {
let verifyAlg = "RSA2048|PKCS1|SHA1"; // 签名算法规格
let verifier = cryptoFramework.createVerify(verifyAlg);
await verifier.init(pubKey);
let res = await verifier.verify(content, signMessageBlob);
console.info("verify result is " + res);
return res;
}
export async function convertAsyKey() {
let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA2048');
// 随机生成的公私钥对,Base64格式
let pubKeyVal = "";
let priKeyVal = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAIb6iT4b3FZeLkNnAEgYnbdHgKqFQ+i4m28zJfIkJP3+zd1OdhE8KS1Mp56IwwLV7lQgai+0z6/SeXRLk/Wdn9NqkB5RRk3hdvYkIDBAYSiJR4OsIxTURp9gTOUgzbAlza6uIHpRGIGVteeagMHoZXgfjSdTRdQxoXUXK50eoPffAgMBAAECgYAjhP5kp7Q9zh7igdJjJocqWdiUBumt7haJFq6fn79UT58g46rSMkCruQZLA7Y9ospKvRT0ZOJaZEqtWMEg20/ZUtQfWUOpI0V1zp1PFysSwwL9SWJs9p3uuOS9IDp5Ra4lC+OcsCaSLmbnk1/BhqFXcOIL0VDYQCuB6tIdWA0cUQJBALwmJXOEy7riox0TU9Mv6Rw/QfJIXSwrMDgnt62VEAfdH0NlSbApA51kbzjOupytNVJy43Rpd/uxI/Qw5e6dT70CQQC3p7h7YmlghYYPZ9v5YHuDZBtsQQwDvajUE6GxsNb6aWjSa/lDk96t38uIoFnLCfYdFv0xWqFAAa7i+LHAjwHLAkBMIUtKINOmvQmvPCDQ9TPnwBjZBjrdImSSdE+4Jvajl++Mf7F/XDkgOIFghRWxS8ylneM3OW3ZI+YeaqK/GFwpAkB+Er/cy4DlRqPx3W0vcuE3IDiHBtw1kTPdaiCct3XMbyILGR4DGvZJTBEPmGwrqonuDEMBZ2K8aqtgmjKDqmgjAkEAp3v1uyl6pTp4El5lgqZw5VR7czmXLDWGFZTAaTP/VLSNa5ppFFTrgcxcYfGeHch9GuwhWkivMo8o6pCQZIsLFw==";
// let pkBlob: cryptoFramework.DataBlob = { data: stringToUnit8Array(pubKeyVal) };
let prBlob: cryptoFramework.DataBlob = { data: stringToUnit8Array(priKeyVal) };
rsaGenerator.convertKey(null, prBlob, async (err, keyPair) => {
if (err) {
console.error(`convertKey failed, ${err.code}, ${err.message}`);
return;
}
console.info('convertKey success!');
let plainText: string = "1234";
let res = await signMessagePromise({ data: new Uint8Array(buffer.from(plainText, 'utf-8').buffer) }, keyPair.priKey)
console.log("convertKey sign result:" + new util.Base64Helper().encodeToStringSync(res.data))
let verifyResult = await verifyMessagePromise({
data: new Uint8Array(buffer.from(plainText, 'utf-8').buffer)
}, res, keyPair.pubKey);
if (verifyResult == true) {
console.info('convertKey verify success');
} else {
console.error('convertKey verify failed');
}
});
}
export function stringToUnit8Array(str: string): Uint8Array {
return new util.Base64Helper().decodeSync(str)
}
更多关于HarmonyOS鸿蒙Next中如何将Java的rsa签名翻译过来?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,若要将Java的RSA签名功能翻译过来,可以使用鸿蒙提供的CryptoFramework
模块。CryptoFramework
是鸿蒙系统中用于加密、解密、签名、验签等操作的框架。
具体步骤如下:
-
导入相关模块:首先需要导入
CryptoFramework
模块。import cryptoFramework from '[@ohos](/user/ohos).security.cryptoFramework';
-
创建密钥生成器:使用
CryptoFramework
创建RSA密钥生成器。let keyGen = cryptoFramework.createAsyKeyGenerator("RSA1024|PRIMES_2");
-
生成密钥对:通过密钥生成器生成RSA密钥对。
keyGen.generateKeyPair((err, keyPair) => { if (err) { console.error("generateKeyPair error: " + err.code); return; } let pubKey = keyPair.pubKey; let priKey = keyPair.priKey; });
-
创建签名对象:使用生成的私钥创建签名对象。
let signer = cryptoFramework.createSign("RSA1024|PKCS1|SHA256"); signer.init(priKey, (err) => { if (err) { console.error("signer init error: " + err.code); return; } });
-
更新数据并签名:将需要签名的数据更新到签名对象中,并生成签名。
let data = "data to be signed"; signer.update(data, (err) => { if (err) { console.error("signer update error: " + err.code); return; } signer.sign(data, (err, signature) => { if (err) { console.error("signer sign error: " + err.code); return; } console.info("Signature: " + signature); }); });
通过以上步骤,你可以在HarmonyOS鸿蒙Next中实现与Java RSA签名相同的功能。
在HarmonyOS鸿蒙Next中,将Java的RSA签名翻译过来,可以使用OpenHarmony提供的cryptoFramework
模块。首先,通过cryptoFramework.createAsyKeyGenerator
生成RSA密钥对,然后使用cryptoFramework.createSign
创建签名对象。设置私钥后,调用sign.init
初始化签名,再使用sign.update
传入待签名数据,最后通过sign.sign
生成签名。具体代码可参考OpenHarmony官方文档。