我使用以下代码在nodejs端生成了rsa密钥对: const crypto = require('crypto');
// Generate the RSA key pair
const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
modulusLength: 2048, // the length of your key in bits
publicKeyEncoding: {
type: 'pkcs1',
format: 'pem'
},
privateKeyEncoding: {
type: 'pkcs1',
format: 'pem'
}
});
res.status(201).json({ message: '患者创建成功', 钱包:钱包, rsa密钥对:{ 公钥: 公钥, } });
然后我将公钥发送到 flutter 端,然后在 flutter 端我无法解析公钥,我已经对公钥进行了硬编码:
var publicKeyString =“-----开始公钥-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCE5COmhzUZLWHMW8FvgFG2QUdDmPvwOlvSHGrSV+asZOrVLzbwJQl0q3V0cZXyRR/j4YtwRI9x0z6nK25KfNDaGDM sgRiyqNil3dzE7c5QHd1CTC50RnDZnxztQBdNY3/WGFxBcF4WM2YtRqG5f10iSu0K5B7sX3k54bpMb0vHfQIDAQAB-----结束公钥-----";
// Convert the keys from string to usable format
final publicKey = RSAKeyParser().parse(publicKeyString) as RSAPublicKey;
我在这一行遇到某种格式错误。
我尝试通过更改密钥格式来修复此错误,但没有成功
使用
package:basic_utils
。
这个实用程序可以解析你的字符串。
import 'dart:convert';
import 'package:basic_utils/basic_utils.dart';
import 'package:pointycastle/export.dart';
RSAPublicKey _publicKey(String material) {
return CryptoUtils.rsaPublicKeyFromDERBytes(
base64.decode(
material
.replaceAll('\\n', '')
.replaceAll('\n', '')
.replaceAll('-----BEGIN PUBLIC KEY-----', '')
.replaceAll('-----END PUBLIC KEY-----', ''),
),
);
}
请注意,您的密钥在第一行之后和最后一行之前似乎没有换行符。如果您添加这些(
-----BEGIN PUBLIC KEY-----\nMIGfMA...
,那么您可以使用较短的
final key = CryptoUtils.rsaPublicKeyFromPem(publicKeyString);