Comment créer une paire de clés d'ecdsa dans un format lisible par Java

introduction

Dans certains cas, comme JWT, vous souhaitez signer et vérifier à l'aide de la clé publique / privée sur le serveur. Je pense que le côté bibliothèque JWT fournit une méthode pour créer une paire de clés, mais si vous l'utilisez, une paire de clés sera générée chaque fois que vous démarrez l'application. Si vous ne pouvez pas désactiver le JWT précédemment émis à chaque démarrage, vous utiliserez une paire de clés fixe.

De nos jours, ECDSA semble être utilisé plus souvent que RSA car il est plus petit et a le même niveau de cryptage.

Créer une clé

Créez au format pem.

openssl ecparam -genkey -name secp256k1 -out key-pair.pem
openssl pkcs8 -topk8 -inform pem -in key-pair.pem -outform pem -nocrypt -out private.pem
openssl ec -in key-pair.pem -pubout -outform pem -out public.pem

private key

la clé privée est

import java.nio.file.Files;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;

String privatePem = new String(Files.readAllBytes(path))
                    .replaceAll("\\r\\n", "")
                    .replaceAll("\\n", "")
                    .replaceAll("-----BEGIN PRIVATE KEY-----", "")
                    .replaceAll("-----END PRIVATE KEY-----", "");
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(privatePem));
PrivateKey privateKey = KeyFactory.getInstance("EC").generatePrivate(keySpec);

public key

String publicPem = new String(Files.readAllBytes(jwtSettings.getPublicKeyAsPath()))
                    .replaceAll("\\r\\n", "")
                    .replaceAll("\\n", "")
                    .replaceAll("-----BEGIN PUBLIC KEY-----", "")
                    .replaceAll("-----END PUBLIC KEY-----", "");
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(publicPem));
PublicKey publicKey =  KeyFactory.getInstance(jwtSettings.getAlgorithm()).generatePublic(keySpec);

Lien de référence

Recommended Posts

Comment créer une paire de clés d'ecdsa dans un format lisible par Java
Ecrire une classe qui peut être ordonnée en Java Un petit mémo standard
J'ai créé un client RESAS-API en Java
Comment créer un conteneur Java
Comment créer un tableau Java
Résumé de l'ORM "uroboroSQL" qui peut être utilisé dans le Java d'entreprise
Comment implémenter un travail qui utilise l'API Java dans JobScheduler
Comment créer un résumé de calendrier Java
Comment créer un robot Discord (Java)
Comment tester une méthode privée et la simuler partiellement en Java
Comment obtenir le chemin absolu d'un répertoire s'exécutant en Java
Comment afficher une page Web en Java
Déconnectez un fichier CSV qui peut être lu par Excel à l'aide de la fonction logback
Comment créer une combinaison unique de données dans la table intermédiaire des rails
Essayez d'enregistrer les données pouvant être lues par JavaFX au format PNG
Comment définir les tabulations et les espaces pour qu'ils soient visibles à l'aide de la touche de tabulation pour insérer des espaces dans des fichiers Java dans Eclipse
Comment créer un environnement Java en seulement 3 secondes
[Java] Informations entières des caractères du fichier texte acquises par la méthode read ()
[Java] Comment obtenir la clé et la valeur stockées dans Map par traitement itératif
Comment créer un URI de données (base64) en Java
[Java] Comment obtenir une requête par communication HTTP
J'ai essayé de créer une fonction de connexion avec Java
[Java] Comment découper une chaîne de caractères caractère par caractère
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
Comment convertir un fichier en tableau d'octets en Java
Résumé de la mise en œuvre des arguments par défaut en Java
[Java] Comment afficher les jours acquis par LocalDate et DateTimeformatter en japonais
Considérer l'adoption du langage Java à l'ère Reiwa ~ Comment choisir un SDK sûr
Comment initialiser par lots des tableaux avec Java que je ne savais pas quand j'étais débutant
[Java] J'ai essayé de créer un jeu Janken que les débutants peuvent exécuter sur la console
Un résumé concis des API de date / heure Java 8 susceptibles d'être utilisées fréquemment
J'ai essayé un puzzle qui ne peut être résolu que par les 10% de mauvais ingénieurs
Liste des appareils pouvant être prévisualisés avec Swift UI
Créez un fichier jar qui peut être exécuté sur Gradle
Comment stocker des chaînes de ArrayList à String en Java (personnel)
Introduction à Rakefile qui peut être effectuée en 10 minutes environ
Rechercher une instruction Switch qui peut être convertie en une expression Switch
Comment sélectionner une date spécifiée par code dans le calendrier FS
Java (édition super débutante) compréhensible en 180 secondes
Éléments à prendre en compte lors de l'écriture de code en Java
Comment développer et enregistrer une application Sota en Java
Comment simuler le téléchargement de formulaires post-objet vers OSS en Java
Comment dériver le dernier jour du mois en Java
Java - Comment créer JTable
Mémo de référence / serveur LDAP en mémoire pouvant être intégré à Java
Comment créer un fichier jar sans dépendances dans Maven
Comment créer un nouveau projet Gradle + Java + Jar dans Intellij 2016.03
Comment faire fonctionner automatiquement un écran créé en Java sous Windows
Comment obtenir l'identifiant de la clé PRIMAY incrémentée automatiquement dans MyBatis
Convertir un tableau de chaînes en une liste d'entiers en Java
Comment renommer un modèle avec des contraintes de clé externes dans Rails
[Java] J'ai essayé de faire un labyrinthe par la méthode de creusage ♪
Comment afficher une liste de chaînes dans JSF sous forme de chaînes séparées par des virgules
Comment identifier le chemin sur lequel il est facile de se tromper
Installation de Mecab qui peut se faire presque en tapant une commande
L'opérateur qui est né pour naître, instanceof (Java) ~ Comment utiliser l'opérateur instanceof ~