Bonjour, Habr! Je vous présente la traduction du cinquième article "Java Signature" par Jakob Jenkov d'une série d'articles pour les débutants qui veulent apprendre les bases de la cryptographie en Java.
Table des matières:
- Cryptographie Java
- Chiffrement Java
- Messagedigest
- Mac
- Signature
- Keypair
- Générateur de clés
- KeyPairGenerator
- Keystore
- Keytool
- Attestation
- CertificateFactory
- CertPath
Signature Java
La classe Signature ( java.security.Signature ) crée une signature numérique pour les données binaires. Une signature numérique est un résumé de message chiffré avec la clé privée d'une paire de clés privée / publique. Quiconque possède la clé publique peut vérifier la signature numérique.
Créer une instance de signature
Avant de pouvoir utiliser la classe Signature, vous devez instancier cette classe en appelant la méthode statique getInstance () . Voici un exemple dans lequel une instance de signature est créée:
Signature signature = Signature.getInstance("SHA256WithDSA");
Le paramètre de chaîne transmis à la méthode getInstance () détermine l'algorithme de chiffrement de signature numérique utilisé.
Initialisation de l'instance de signature
Après avoir créé l'instance Signature, vous devez l'initialiser avant de commencer à l'utiliser. L'instance Signature est initialisée en appelant sa méthode init () . Un exemple d'initialisation d'une instance de signature Java:
SecureRandom secureRandom = new SecureRandom(); KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DSA"); KeyPair keyPair = keyPairGenerator.generateKeyPair(); signature.initSign(keyPair.getPrivate(), secureRandom);
Comme vous pouvez le voir, l'instance Signature est initialisée avec la clé privée de la paire de clés secrète / publique et l'instance SecureRandom.
Création de signature numérique
Lorsque l'instance de signature est initialisée, vous pouvez l'utiliser pour créer des signatures numériques. Une signature numérique est créée en appelant la méthode update () (une ou plusieurs fois) et se terminant par un appel à sign () . Exemple de création d'une signature numérique pour des données binaires:
byte[] data = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); signature.update(data); byte[] digitalSignature = signature.sign();
Vérification de signature numérique
Si vous souhaitez vérifier une signature numérique créée par quelqu'un d'autre, vous devez initialiser l'instance de signature en mode vérification (au lieu du mode signature). Voici à quoi ressemble l'initialisation d'une instance de signature en mode validation:
Signature signature = Signature.getInstance("SHA256WithDSA"); signature.initVerify(keyPair.getPublic());
Notez que l'instance Signature est maintenant initialisée en mode de vérification, en passant la clé publique de la paire de clés comme paramètre. Après l'initialisation en mode de vérification, vous pouvez utiliser l'instance de signature pour vérifier la signature numérique:
byte[] data2 = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); signature2.update(data2); boolean verified = signature2.verify(digitalSignature);