generateRSAKeys static method
Generiert ein RSA-Schlüsselpaar mit der Web Crypto API.
Diese statische Methode nutzt die native Web Crypto API des Browsers zur Generierung eines kryptographisch sicheren RSA-Schlüsselpaars. Die generierten Schlüssel werden automatisch in das PEM-Format exportiert und dann in pointycastle-kompatible Objekte konvertiert.
Parameter:
bitLength
: Die Bit-Länge des zu generierenden Schlüssels (Standard: 2048)
Rückgabe: AsymmetricKeyPair mit RSA-öffentlichem und -privatem Schlüssel
Technische Details:
- Verwendet RSA-OAEP-Algorithmus für sichere Schlüsselgenerierung
- Hash-Algorithmus: SHA-256 für optimale Sicherheit
- Öffentlicher Exponent: 65537 (0x010001) als Standard
- Schlüssel sind für 'encrypt' und 'decrypt' Operationen konfiguriert
Performance: Die Web Crypto API nutzt Hardware-Beschleunigung wenn verfügbar, was zu deutlich besserer Performance führt als Software-basierte Implementierungen.
Wirft eine Exception, wenn die Web Crypto API nicht verfügbar ist oder die Schlüsselgenerierung fehlschlägt.
Implementation
static Future<AsymmetricKeyPair<RSAPublicKey, RSAPrivateKey>> generateRSAKeys(
{int bitLength = 2048}) async {
final publicExponentArray = Uint8List.fromList([0x01, 0x00, 0x01]);
final options = GenerateKeyOptions(
name: 'RSA-OAEP',
modulusLength: bitLength,
publicExponent: publicExponentArray.toJS,
hash: HashAlgorithm(name: 'SHA-256'),
);
final usages = ['encrypt', 'decrypt'].map((s) => s.toJS).toList().toJS;
final keypairResult = await window.crypto.subtle
.generateKey(
options,
true,
usages,
)
.toDart;
final keypair = keypairResult as CryptoKeyPair;
final publicKey = keypair.publicKey;
final privateKey = keypair.privateKey;
final rsaPublicKeyPEM = await _exportPublicKey(publicKey);
final rsaPrivateKeyPEM = await _exportPrivateKey(privateKey);
RSAPublicKey rsaPublicKey = rsaPublicKeyPEM.parsePublicKeyFromPem();
RSAPrivateKey rsaPrivateKey = rsaPrivateKeyPEM.parsePrivateKeyFromPem();
return AsymmetricKeyPair<RSAPublicKey, RSAPrivateKey>(
rsaPublicKey, rsaPrivateKey);
}