HarmonyOS 鸿蒙Next:cryptoFramework RSA使用私钥加密数据,程序不运行
HarmonyOS 鸿蒙Next:cryptoFramework RSA使用私钥加密数据,程序不运行
RSA 使用公钥加密数据,私钥解密数据运行正常。
使用私钥加密数据程序不运行,请问是什么原因?
let cipher = cryptoFramework.createCipher(‘RSA1024|PKCS1’); await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, keyPair.priKey, null);
关于HarmonyOS 鸿蒙Next:cryptoFramework RSA使用私钥加密数据,程序不运行的问题,您也可以访问:https://www.itying.com/category-93-b0.html 联系官网客服。
升级HarmonyOS后,感觉手机的整体性能都有了很大的提升。
1、《使用RSA密钥对(PKCS1模式)签名验签》 -- 对应Android端的私钥签名验签
2、《使用RSA密钥对(PKCS1模式)签名及签名恢复》 -- 对应Android端的私钥加密解密
你用的是api 11吧
使用的5.0.0(12)
文档是,从目前看是公钥加密私钥解密的模式: 调用Cipher.init,设置模式为加密(CryptoMode.ENCRYPT_MODE),指定加密密钥(KeyPair.PubKey),初始化加密Cipher实例; 调用Cipher.init,设置模式为解密(CryptoMode.DECRYPT_MODE),指定解密密钥(KeyPair.PriKey)初始化解密Cipher实例
找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17
没有解决,我没用cryptoFramework了 我用napi调用了openssl,用C实现的
大佬 求教程
请问解决了吗?同样的问题,已知公钥,不知道怎么转换
看到下面这个方法,但是还是报401参数错误,不着调怎么处理
@ohos.security.cert (证书模块)-安全-ArkTS接口参考-ArkTS API参考-HarmonyOS应用开发
还没解决
let strBuffer = buffer.from(pubKeyString, ‘utf-8’) let arrData = new Uint8Array(strBuffer.buffer) let rsaGenerator = cryptoFramework.createAsyKeyGenerator(“RSA1024”); let pubKeyBlob = { data: arrData }; let keyPair = await rsaGenerator.convertKey(pubKeyBlob, null); return keyPair.pubKey
我在文档看到这个转换方法,但是运行报错了,不知道啥原因
是不是code返回401;非法入参;arrData这个数组数据需要符合x509规范,应该是数组长度需要是162
私钥加密就是签名,否则单纯作为数据加密没有意义,公钥要分发,所有人都知道
这里的公私钥格式不同,不能调换使用
try catch一下 这里 await cipher1.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, keyPair.priKey, null);私钥加密模式初始化出错了
我再试试看。现在业务场景就是单纯的用私钥加密数据,然后用公钥解密数据,不需要数据签名
移植的java代码是这样,运行是正常的。
// 使用私钥-加密数据
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, privateKey);
cipher.doFinal(data);
// 使用公钥-解密数据
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, publicKey);
cipher.doFinal(data);
可能公钥和私钥对象不一样
看了文档,数据加密和签名的操作是不一样的
数据加密:公钥加密、私钥解密
签名:私钥签名、公钥验证
let src = "hello123"
<span class="hljs-keyword">let</span> rsaGenerator = cryptoFramework.createAsyKeyGenerator(<span class="hljs-string">"RSA1024|PRIMES_2"</span>);
<span class="hljs-keyword">let</span> keyPair = await rsaGenerator.generateKeyPair();
<span class="hljs-keyword">let</span> srcData: cryptoFramework.DataBlob = { data: <span class="hljs-keyword">new</span> <span class="hljs-built_in">Uint8Array</span>(buffer.from(src, <span class="hljs-string">'utf-8'</span>).buffer) };
<span class="hljs-keyword">let</span> cipher1 = cryptoFramework.createCipher(<span class="hljs-string">"RSA1024|PKCS1"</span>);
await cipher1.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, keyPair.priKey, <span class="hljs-literal">null</span>);
<span class="hljs-keyword">let</span> enResult = await cipher1.doFinal(srcData);
Log.info(<span class="hljs-string">"result123456"</span>, <span class="hljs-string">"encode success"</span>)
<span class="hljs-keyword">let</span> cipher2 = cryptoFramework.createCipher(<span class="hljs-string">"RSA1024|PKCS1"</span>);
await cipher2.init(cryptoFramework.CryptoMode.DECRYPT_MODE, keyPair.pubKey, <span class="hljs-literal">null</span>);
<span class="hljs-keyword">let</span> deResult = await cipher2.doFinal(enResult);
Log.info(<span class="hljs-string">"result123456"</span>, <span class="hljs-string">"decode success"</span>)
<span class="hljs-keyword">let</span> textDecoder = util.TextDecoder.create(<span class="hljs-string">'utf-8'</span>, { ignoreBOM : <span class="hljs-literal">true</span> })
Log.info(<span class="hljs-string">"result123456"</span>, textDecoder.decodeWithStream(deResult.data))</code><button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button></pre> <p>私钥加密,公钥解密,程序运行失败</p></div></div>
楼主 你解决了吗
没有