Encryption with private key in RSA using Dart
どうしても 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 も動きそうな気がします.