Les plus courants incluent : le mot de passe utilisateur de la base de données, le mot de passe utilisateur de la plateforme SMS, le mot de passe fixe pour la vérification inter-systèmes, etc.
Cette classe d'outils fait référence à l'implémentation de la section 5.3 du livre « Spring.3.x Enterprise Application Development Practice ».
Le code complet et les informations d'annotation sont les suivants :
Copiez le code comme suit :
paquet com.cncounter.util.comm ;
importer java.security.Key ;
importer java.security.SecureRandom ;
importer javax.crypto.Cipher ;
importer javax.crypto.KeyGenerator ;
importer sun.misc.BASE64Decoder ;
importer sun.misc.BASE64Encoder ;
classe publique DESUtils {
// clé
Clé de clé statique privée ;
// Graine CLÉ
chaîne statique privée KEY_STR = "[email protected]" ;
// constante
chaîne finale statique publique UTF_8 = "UTF-8" ;
chaîne finale statique publique DES = "DES";
// initialisation statique
statique{
essayer {
// Générateur de CLÉ
Générateur KeyGenerator = KeyGenerator.getInstance(DES);
//Initialisation, opérateur aléatoire sécurisé
generateur.init(new SecureRandom( KEY_STR.getBytes(UTF_8) ));
// Générer la clé
key = générateur.generateKey();
générateur = nul ;
} attraper (Exception e) {
lancer une nouvelle RuntimeException(e);
}
}
/**
* Chiffrez la chaîne source et renvoyez la chaîne chiffrée codée en BASE64.
* @param source chaîne source, texte brut
* @return chaîne de texte chiffré
*/
Encodage de chaîne statique public (source de chaîne) {
essayer {
// Récupère le tableau d'octets selon le format d'encodage
octet[] sourceBytes = source.getBytes(UTF_8);
// Mode de chiffrement DES
Chiffrement chiffre = Cipher.getInstance(DES);
cipher.init(Cipher.ENCRYPT_MODE, clé);
// Tableau d'octets chiffré
byte[] encryptSourceBytes = cipher.doFinal(sourceBytes);
// Encodeur Base64
BASE64Encoder base64Encoder = nouveau BASE64Encoder();
return base64Encoder.encode(encryptSourceBytes);
} attraper (Exception e) {
// le lancer peut également être considéré comme un chemin de retour
lancer une nouvelle RuntimeException(e);
}
}
/**
* Décoder/déchiffrer la chaîne chiffrée par la méthode encode() de cette classe d'outils
* @param chiffré La chaîne chiffrée, c'est-à-dire le texte chiffré
* @return chaîne de texte brut
*/
Décodage de chaîne statique publique (chaîne cryptée) {
// Décodeur Base64
BASE64Decoder base64Decoder = nouveau BASE64Decoder();
essayer {
//Décoder d'abord la base64
byte[] cryptedBytes = base64Decoder.decodeBuffer(encrypted);
// Mode de déchiffrement DES
Chiffrement chiffre = Cipher.getInstance(DES);
cipher.init(Cipher.DECRYPT_MODE, clé);
//Tableau d'octets décodé
byte[] decryptStrBytes = cipher.doFinal(cryptedBytes);
// Convertit le tableau d'octets en chaîne en utilisant le format d'encodage donné
renvoie une nouvelle chaîne (decryptStrBytes, UTF_8);
} attraper (Exception e) {
// Ce formulaire est en effet adapté au traitement des classes d'outils
lancer une nouvelle RuntimeException(e);
}
}
// test unitaire
public static void main (String[] arguments) {
//Chaîne qui doit être chiffrée
Chaîne email = "[email protected]" ;
//chiffrer
Chaîne chiffrée = DESUtils.encode(email);
// Décrypter
Chaîne déchiffrée = DESUtils.decode (chiffrée);
//résultat de sortie ;
System.out.println("email: " + email);
System.out.println("crypté : " + chiffré);
System.out.println("déchiffré : " + déchiffré);
System.out.println("email.equals(déchiffré): " + email.equals(déchiffré));
}
}