Demo🔗
Inserisci un messaggio qui sotto e poi premi il pulsante crittografa. Il messaggio crittografato apparirà in fondo. Facoltativamente puoi cambiare il destinatario del messaggio, sostituendo una chiave pubblica diversa.
Module Loading, please wait...
Public Key (optional)
The current public key defaults to mine. You can change the recipient just be replacing my public key with theirs.
Your encrypted message will appear here.
Il messaggio crittografato può quindi essere copiato e inviato, ad esempio tramite e-mail, al destinatario previsto. Sarà l'unico in grado di leggerlo.
Ho realizzato questo mini-progetto perché praticamente tutte le implementazioni PGP online smettevano di funzionare per la mia chiave pubblica. Non ho idea del perché, ma sembra che tutte utilizzino OpenPGP.js, quindi forse c'è qualche problema di fondo con le impostazioni predefinite utilizzate.
Per questo ho usato Rust (Sequoia-PGP), compilato in wasm, e l'ho semplicemente collegato a un'interfaccia utente semplice come vedi qui. Puoi visualizzare il repository, ma il codice è più o meno il seguente:
use std::io::Write;
use sequoia_openpgp::{policy::StandardPolicy, serialize::stream::{Armorer, Encryptor2, LiteralWriter, Message}, Cert};
use wasm_bindgen::prelude::*;
use sequoia_openpgp::parse::Parse;
#[wasm_bindgen]
pub fn encrypt_message(public_key: &str, msg_str: &str) -> Result<String, JsValue> {
let cert = Cert::from_bytes(public_key).expect("Problemi durante l'analisi del certificato");
let p = &StandardPolicy::new();
let recipients =
cert.keys().with_policy(p, None).supported().alive().revoked(false)
.for_transport_encryption();
let mut sink = vec![];
let message = Message::new(&mut sink);
let message = Armorer::new(message).build().expect("Problemi durante la protezione del messaggio");
let message = Encryptor2::for_recipients(message, recipients).build().expect("encryptor 2");
let mut w = LiteralWriter::new(message).build().expect("Problemi durante la creazione dello scrittore dal messaggio");
let _ = w.write_all(msg_str.as_bytes());
let _ = w.finalize();
let result = String::from_utf8(sink).expect("Problemi durante la conversione del risultato in stringa");
return Ok(result);
}