Maison  >  Article  >  Java  >  Magasin de clés Java

Magasin de clés Java

王林
王林original
2024-08-30 15:39:24568parcourir

Keystore est une base de données en Java ; cela nous permet de stocker des données dans des formats clés ; Keystore est une extension de la classe Java java.security.KeyStore, nous pouvons écrire keyStore sur le disque et le lire à partir du disque lui-même ; le principal avantage de l'utilisation de keystore en Java est qu'il nous permet de protéger les données car il a la fonctionnalité de stocker les données sous forme de protection avec un mot de passe. Ces mots de passe sont leurs mots de passe car ces types de fonctionnalités de stockage sont les meilleures pour gérer les cas où nous devons mettre en œuvre un mécanisme de cryptage et de décryptage.

Commencez votre cours de développement de logiciels libres

Développement Web, langages de programmation, tests de logiciels et autres

Comment créer un KeyStore en Java ?

Avant de créer un Keystore, nous devons comprendre ses types ; il existe certains mécanismes de clé disponibles. keyStore sont des clés publiques (cette clé contient généralement un certificat associé qui est public), privé et public (utilisé pour tout type de cryptage asymétrique). Nous pouvons utiliser la méthode getInstance() de Java pour créer un Keystore en Java. Cette méthode est la méthode intégrée définie dans la classe principale et que nous avons dépassée. Vous trouverez ci-dessous un exemple de création d'un type KeyStore par défaut en Java. Je le dis par défaut car nous ne transmettons aucun paramètre dans la fonction. Si nous voulons créer un keyStore personnalisé, nous pouvons transmettre l'argument dans la méthode pour nos types de Keystore requis.

KeyStore customKeyStore = KeyStore.getInstance(custom-format);

Ici, nous pouvons passer custom-format = PKCS12

Remarque : Un PKCS12 (il s'agit d'une clé publique et d'une norme de cryptographie) définit un format pour stocker les certificats pour le serveur. Cela nous permet également de stocker les clés privées dans un seul fichier cryptable.

Exemple

Vous trouverez ci-dessous un exemple de création d'une boutique à l'aide de la méthode getInstance().

Code :

import java.io.FileInputStream;
import java.security.KeyStore;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class KeyCreate {
public static void main(String args[]) throws Exception {
//Creation of Keystore
KeyStore ks = KeyStore.getInstance("JCEKS");
System.out.println("Key Store Created");
}
}

Sortie :

Magasin de clés Java

Comment charger KeyStore en Java ?

Ici, le chargement est un mécanisme important pour les magasins de clés si nous parlons de la section de chargement du Keystore. Nous devons être prudents lors de l'exécution de cette opération, car elle ne doit se charger qu'en cas de besoin. Le chargement est important car on ne peut pas utiliser Keystore sans le charger. Il est également possible de charger le Keystore avec des données vides. En général, nous pouvons charger le Keystore soit à partir de n’importe quel fichier, soit à partir de n’importe quel autre stockage. Il existe une méthode appelée load(); cette méthode effectuera la tâche de chargement des données. Nous pouvons transmettre deux attributs à la méthode de chargement ; les attributs sont

  • InputStream : Il s'agit du flux d'entrée à partir duquel les données seront lues ; le flux peut provenir de n'importe quel fichier ou autre source.
  • Char [] : Cette section est pour la sécurité ; ici, nous pouvons transmettre une chaîne pour le mot de passe KeyStore pour le cryptage.

Comprenons le flux de base pour charger KeyStore.load (dataStream, mot de passe). Ici, nous pouvons prendre inputStream comme dataStream et n'importe quelle chaîne pour le mot de passe. Comme nous l'avons mentionné, nous pouvons également charger les données vides pour KyeStore, ce que nous pouvons faire en transmettant n'importe quelle valeur nulle pour le dataStream du keyStore comme KeyStore.load (null, mot de passe Keystore). Une fois que nous transmettons la valeur null comme flux de données, il prendra une valeur nulle et créera un Keystore vide pour nous. Une chose importante à propos du keystore est que si nous ne chargeons pas le KeyStore, il lèvera une exception pour toute méthode que nous appelons. Pour une meilleure pratique du codage également, il est très important de charger le keyStore avant de commencer à l'utiliser.

Exemple

Dans l'exemple ci-dessous, nous chargeons un Keystore avec une valeur nulle.

Code :

import java.io.FileInputStream;
import java.security.KeyStore;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class KeyLoad {
public static void main(String args[]) throws Exception {
//Creation of Keystore
KeyStore ks = KeyStore.getInstance("JCEKS");
ks.load(null);
System.out.println("Loading of an empty Keystore done");
}
}

Sortie :

Magasin de clés Java

Comment stocker KeyStore en Java ?

Nous avons beaucoup discuté du chargement et de la création du KeyStore en Java ; concentrons-nous maintenant sur le stockage. Ici, le stockage signifie les données que nous souhaitons stocker pour des utilisations futures, le stockage peut donc être effectué n'importe où, soit sur la base de données, soit sur le disque, selon nos choix. Nous avons une méthode appelée store qui jouera le rôle de stockage des données dans KeyStore. Nous pouvons transmettre deux attributs à la méthode KeyStore store(). Vous trouverez ci-dessous un exemple de syntaxe simple.

Syntaxe

keyStore.store(streamOfOutputData ,password);

Ici, le flux de streamOfOutputData peut lire les données de n'importe quel chemin et fichier, et le mot de passe est la chaîne de mot de passe pour le cryptage de nos données stockées. Si nous avons besoin des données que nous avons stockées à l'avenir, nous pouvons les récupérer à partir des emplacements stockés en les chargeant à nouveau.

Exemple

Code :

import java.io.FileInputStream;
import java.security.KeyStore;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class KeyStoreExample {
public static void main(String args[]) throws Exception {
//Creation of Keystore
KeyStore ks = KeyStore.getInstance("JCEKS");
//Loading the KeyStore object
char[] ps = "ranjan".toCharArray();
String filePath = "./cacerts";
java.io.FileInputStream streamInput = new FileInputStream(filePath);
ks.load(null);
KeyStore.ProtectionParameter pp = new KeyStore.PasswordProtection(ps);
//Here we are creating an secret object
SecretKey ms = new SecretKeySpec("anypassword".getBytes(), "DSA");
//Creating SecretKeyEntry object
KeyStore.SecretKeyEntry ske = new KeyStore.SecretKeyEntry(ms);
ks.setEntry("secretKeyAlias", ske, pp);
//Storing the object
java.io.FileOutputStream storeData = null;
storeData = new java.io.FileOutputStream("nameOfNewKey");
ks.store(storeData, ps);
System.out.println("data stored");
}
}

Sortie :

Magasin de clés Java

How to Get and Set Keys?

We can use two methods called getKey and setKey to get and set the keys. These methods are part of the KeyStore in Java. The method getEntry will allow us to get the value stored. Note that we have stored the value on the key with a password, so we need to pass the alias name of the key and the password used for storing the key. Similarly, we have a method called setKeyEntry.After getting the value from the keyStore again, we can access the data with various available methods like getPrivateKey(),getcertificate(),getPrivateKey(), and getCertificateChain(). These methods can be used to get the data according to our requirements from the KeyStore.

Example

In the example below, we check if the key is available from any KeyStore.

Code:

import java.security.*;
import java.security.cert.*;
import java.util.*;
import java.io.*;
public class SetAndGetKey {
public static void main(String[] argv)
{
try {
KeyStore store = KeyStore.getInstance("JCEKS");
store.load(null);
Boolean status
= store.isKeyEntry("test");
if (status)
System.out.println("The key available");
else
System.out.println("The key is not available");
}
catch (NoSuchAlgorithmException e) {
//catch code to handle exception
}
catch (NullPointerException e) {
//catch code to handle exception
}
catch (KeyStoreException e) {
//catch code to handle exception
}
catch (FileNotFoundException e) {
//catch code to handle exception
}
catch (IOException e) {
//catch code to handle exception
}
catch (CertificateException e) {
//catch code to handle exception
}
}
}

Output:

Magasin de clés Java

Java KeyStore Methods

To perform various operations on the KeyStore, we have various methods below.

  • load(inputStream, password): It will load the keyStore data, and it needs two parameters, one as the input stream(file or any disk data) and password of string
  • store(outputStream, password): This method will be used for storing the data, and it will take two params one is output stream which from where data is going to read it could be file or disk and the second parameter is the password which will encrypt the data which we are storing.
  • getInstance(): This method is used to create a keyStore; if we pass nothing to this method, then it will create a default keyStore else, we can pass PKCS12 as the keyStore type.
  • getPrivateKey(): After getting keyStore, we can fetch private keys with this method.
  • getCertificate(): We can use this method to get the certificates.
  • getCertificateChain(): If we want to get a chain of certificates, we can use this method.

Conclusion

From this tutorial, we learned the basic concept of KeyStore in Java and about the creation, loading, and getting of various types of data from the Keystore data; we learned about the various available methods and their uses in Java for KeyStore.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Java StringJoinerArticle suivant:Java StringJoiner