Encryption with private key in RSA using Dart
🏷️
Photo by Debby Hudson on Unsplash
どうしても RSA Private key を使用して署名をしなきゃいけない案件があったのでやりました.
使用したライブラリは下記です.
死ぬほど助かりました.
このライブラリを選択したのは parseKeyFromFile が用意されていたからです.
ほかにも似たライブラリはあるんですが,KeyPair をジェネレートまたは JWT から生成しかなさそうでした.
今回は環境変数に base64 エンコードした key をセットして再署名していきます.
Future<T> parseKeyFromFile<T extends RSAAsymmetricKey>(String filename) async {
final file = File(filename);
final key = await file.readAsString();
final parser = RSAKeyParser();
return parser.parse(key) as T;
}
というわけでコード.
import 'package:encrypt/encrypt.dart';var key = bool.hasEnvironment('PRIVATE_KEY')
? String.Environment('PRIVATE_KEY')
: '';def sign() {
var parser = RSAKeyParser();
var privateKey = parser.parse(utf8.decode(base64.decode(key)));
var signer =
Signer(RSASigner(RSASignDigest.SHA256, privateKey: privateKey));
var content = 'This is content.'
return signer.sign(content).base64;
}
Flutter web で問題なく動いたので Android ・ iOS も動きそうな気がします.