writeln!でpemファイルを作成します。
env::set_var("RUST_BACKTRACE", "1"); let secret_key = SigningKey::random(&mut OsRng); let secret_key_serialized = secret_key .to_pkcs8_pem(Default::default()) .unwrap() .to_string(); println!("Secret Key: \n{}", secret_key_serialized); let mut file = File::create("secret.pem").expect("file not found."); writeln!(file, "{}", secret_key_serialized).expect("can not write.");
すると、最後尾に2行改行が入ってしまいます。
-----BEGIN PRIVATE KEY----- MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgO7s4/UmqJ5+UWIIU oL4XIxslh+htWtvTY7wZPp+usEKhRANCAAS/iV6WinhhKw8M/tkGNNwf2W+Vt+cd d0hLjWQ9iZhjP7NxlPLoUjWERctvft3zPOktCedW5rzLIhVtj7rX2F4j -----END PRIVATE KEY-----
これをstd::fs::read_to_stringで読み取ってパースしても、改行が入っているためエラーになってしまいます。
改行を指定しての文字列削除や文字列の置き換え(s.replace)だとうまくいかないのですが、
trim()だと、いい具合に最後2行の改行を削除してくれます。
let mut file = File::create("secret.pem").expect("file not found."); writeln!(file, "{}", secret_key_serialized).expect("can not write."); let contents = std::fs::read_to_string("secret.pem") .expect("something went wrong reading the file"); let secret_pem = contents.trim(); println!("{}", secret_pem);
Secret Key:
—–BEGIN PRIVATE KEY—–
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgNMDcEubwpsVrs/TJ
YgiL/HFyb3hvOgF/QI3AwXWBFKmhRANCAARyuwFIbkPm5Q1zbd6DZbNMG35s7NmU
6QduJGRjofpwCrVaOorsjZASpG546WgoTof9eONpXYY92NY5hCvhPJrU
—–END PRIVATE KEY—–
—–BEGIN PRIVATE KEY—–
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgNMDcEubwpsVrs/TJ
YgiL/HFyb3hvOgF/QI3AwXWBFKmhRANCAARyuwFIbkPm5Q1zbd6DZbNMG35s7NmU
6QduJGRjofpwCrVaOorsjZASpG546WgoTof9eONpXYY92NY5hCvhPJrU
—–END PRIVATE KEY—–
素晴らしいですね。これ解決するのに半日かかりました。