Пример на Rust: Генерация пары открытого/закрытого ключей с использованием sodiumoxide и сохранение в файл

Эта простая программа на Rust демонстрирует, как сгенерировать пару открытого/закрытого ключей с использованием крейта sodiumoxide и сохранить ключи в файлы в формате base64.

src/main.rs
use sodiumoxide::crypto::sign;
use std::fs::File;
use std::io::Write;
use std::path::Path;
use base64::{Engine as _, engine::general_purpose};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Инициализация sodiumoxide
    sodiumoxide::init().expect("Не удалось инициализировать sodiumoxide");

    // Генерация новой пары ключей
    let (public_key, secret_key) = sign::gen_keypair();

    // Преобразование ключей в base64
    let public_key_b64 = general_purpose::STANDARD.encode(public_key.as_ref());
    let secret_key_b64 = general_purpose::STANDARD.encode(secret_key.as_ref());

    // Определение путей к файлам
    let public_key_path = Path::new("public_key.b64");
    let secret_key_path = Path::new("secret_key.b64");

    // Сохранение открытого ключа в файл
    let mut public_key_file = File::create(public_key_path)?;
    public_key_file.write_all(public_key_b64.as_bytes())?;

    // Сохранение закрытого ключа в файл
    let mut secret_key_file = File::create(secret_key_path)?;
    secret_key_file.write_all(secret_key_b64.as_bytes())?;

    println!("Пара ключей сгенерирована и сохранена успешно!");
    println!("Открытый ключ сохранён в: {:?}", public_key_path);
    println!("Закрытый ключ сохранён в: {:?}", secret_key_path);

    Ok(())
}
Cargo.toml
[package]
name = "MakeKeyPair"
version = "0.1.0"
edition = "2021"

[dependencies]
sodiumoxide = "0.2"
base64 = "0.21"

Как запустить

run.sh
cargo run

Вывод

output.txt
Public key saved to: "public_key.b64"
Secret key saved to: "secret_key.b64"

Check out similar posts by category: Cryptography, Rust