dart Flutter -如果我们有RSA公钥,如何解密RSA私钥加密的字符串?

dhxwm5r4  于 2023-03-27  发布在  Flutter
关注(0)|答案(2)|浏览(322)

Flutter应用程序以public.pem文件的内容形式接收公钥,该公钥将是类似于“-----开始PUBLIC KEY-----MIICqq 7 DBi 9 sBXZfDYJC + G57 JYUCAwEAAQ ==.... -----END PUBLIC KEY-----”的字符串。
我们还有一个散列字符串,如“yBuHq 6 gZ... dgWs =”。
用于散列的算法是RSA,并执行以下nodejs代码来生成密钥:

crypto.generateKeyPairSync('rsa', 
    {
            modulusLength: modulusLength,
            namedCurve: 'secp256k1', 
            publicKeyEncoding: {
                type: 'spki',
                format: 'pem'     
            },     
            privateKeyEncoding: {
                type: 'pkcs8',
                format: 'pem',
                cipher: 'aes-256-cbc',
                passphrase: passphrase
            } 
    });

我想解密哈希值。在nodejs中使用crypto库很容易,但我找不到如何在dart(Flutter)中实现。

ymdaylpp

ymdaylpp1#

是的,这只是一个误解。我需要密钥,原始文本和签名来验证签名。我以为只有密钥和签名就可以得到原始文本,这是不可能的。

hkmswyz6

hkmswyz62#

这是我举的例子,希望对大家有所帮助。

dependencies:
   encrypt: ^5.0.1

import 'package:encrypt/encrypt.dart';
import 'package:pointycastle/export.dart';
import 'dart:convert';

/// RSA decrypt by public key
/// PKCS1
String decryptByPublicKey(String public, String content) {
  RSAKeyParser parser = RSAKeyParser();
  RSAPublicKey publicKey = parser.parse(public) as RSAPublicKey;
  AsymmetricBlockCipher cipher = PKCS1Encoding(RSAEngine());
  cipher
    ..init(false, PublicKeyParameter<RSAPublicKey>(publicKey));
  return utf8.decode(cipher.process(Encrypted.fromBase64(content).bytes));
}

相关问题