Este artigo descreve as funções de criptografia e descriptografia implementadas pelo Java com base no algoritmo de criptografia simétrica DES. Compartilhe -o para sua referência, como segue:
Categorias relacionadas à criptografia DES:
SecureRandom é herdado da classe java.util.random
Existem três tipos de construtores desta classe, os seguintes exemplos são:
O SecureRandom () constrói um gerador de números aleatórios seguros (RNG) que implementa o algoritmo de número aleatório padrão.
O SecureRandom (BYTE [] semente) constrói um gerador de números aleatórios seguros (RNG) que implementa o algoritmo de número aleatório padrão.
O DESKEYSPEC é usado para gerar o conteúdo principal da chave usando a chave original.
Deskeyspec tem dois construtores:
Deskeyspec (byte [] key) cria um objeto DESKEYSPEC usando os 8 primeiros bytes na chave como o conteúdo principal da chave des.
Deskeyspec (key [] Int Offset) cria um objeto Deskeyspec, usando os 8 primeiros bytes na chave que começa e contém compensação como o conteúdo principal da tecla DES-AED.
SecretKeyFactory, uma fábrica importante usada para converter uma chave (chave de criptografia OPIC da chave do tipo) em uma especificação -chave (representação transparente do material -chave subjacente) e vice -versa. A fábrica secreta de chave opera apenas em teclas secretas (simétricas).
Objeto SecretKey, objeto Secret Key, gera a chave secreta chamando o método GeratedSecret (Deskyspec, Desktop Space) da fábrica secreta -chave
A classe cifra fornece funções de senha para criptografia e descriptografia e obtém instâncias chamando o getInstance de Cipher ("DES")
O objeto cifra chama o método init () para inicializar o objeto.
Finalmente, ligue para o método Dofinal () da Cipher para criptografia e descriptografia.
Aqui, eu gostaria de fazer uma pergunta.
1. Use Sun.Misc.Base64Decoder e Base64Encoder para decodificar e codificar
pacote com.soufun.com; importar java.io.ioException; importar java.security.nosuchalgorithMexception; importar java.security.securerndom; importar javax.util.date; import javax.crypto.cipra; .Deskeyspec; // Importar codificação de 64 bits de importação solar Sun.misc.base64Decoder; importar; importar; Sun.MISC.Base64EnCoder; tente {keyfactory = secretKeyFactory.getInstance ("DES"); // TODO BLOCO DE CATURA AUTOMADO E.PRESSTATSTACKTRACE (); rypt (dados, chave); = new Date (). Gettime (); sem especificar a codificação, mas o especificado também pode ser byte [] Bt = Encrypt (data.getBytes (utf8), key.getBytes (utf8)); // Nota: Ao criptografar e descriptografar, use o Sun Base64Encoder () para codificar e decodificar, caso contrário, haverá um código iluminado strs; Chave de string) lança IoException, Exceção {if (Data == NULL) Retorne NULL; , key.getbytes ()); Encrypt Byte Array * @return * @THOLS Excepção */ byte estático privado [] Encrypt (byte [] Data, byte [] key) lança exceção {// gera um número aleatório de confiança que o Keys Keys de Keys de Keys A fábrica de chave é usada para converter a chave (chave de criptografia opic da chave do tipo) para a especificação -chave (representação transparente do material -chave subjacente) e vice -versa. A fábrica secreta de chave opera apenas em teclas secretas (simétricas). // Use o modo singleton aqui // secretKeyFactory KeyFactory = SecretKeyFactory.getInstance (DES); SecretKey SecureKey = KeyFactory.GeneratesEcret (DKS); Encrypt_mode é usado para inicializar a cifra em uma constante para o modo de criptografia. cipher.init (cifra.encrypt_mode, secureKey, sr); Gerar uma fonte de número aleatória confiável SecureRandom sr = new SecureRandom (); Crie um objeto DESKEYSPEC a partir dos principais dados originais, ou seja, o conteúdo principal da chave que cria o principal deskeyspec dks = new Deskeyspec (chave); A fábrica secreta de chave opera apenas em teclas secretas (simétricas). // Use o modo singleton aqui // secretKeyFactory KeyFactory = SecretKeyFactory.getInstance (DES); SecretKey SecureKey = KeyFactory.GeneratesEcret (DKS); cipher.init (cipher.decrypt_mode, secureKey, sr);2. Use org.apache.commons.codec.binary.base64 para decodificar e codificar
pacote com.soufun.com; importar java.io.ioException; importar java.security.nosuchalgorithMexception; importar java.security.securerndom; importar javax.util.date; import javax.crypto.cipra; .Deskeyspec; importar org.apache.commons.codec.binary.base64;/** *@autor whd * */public classe Desutil {// Definir Método de Criptografia Privada de String estática Des = "Des"; }} public static void main (string [] args) lança exceção { Long Begin = New Date () GetTime (); Time (); chave de criptografia de chave Byte Array * @return * @THOLS Excepção */ public static string cripty (dados da string, chave de string) lança exceção {// use a codificação especificada para obter o conteúdo a ser criptografado. usa Sun.misc.base64Encoder; Base64.encodeBase64String (BT); odec.binary.base64 para decodificar byte [] BUF = base64.DecodeBase64 (Data); Exceção {// Gere uma fonte de número aleatória confiável SecureRandom SR = new SecureRandom (); Crie um objeto DESKEYSPEC a partir dos principais dados originais, ou seja, o conteúdo principal da chave que cria o principal deskeyspec dks = new Deskeyspec (chave); A fábrica secreta de chave opera apenas em teclas secretas (simétricas). // Use o modo singleton aqui // secretKeyFactory KeyFactory = SecretKeyFactory.getInstance (DES); SecretKey SecureKey = KeyFactory.GeneratesEcret (DKS); Encrypt_mode é usado para inicializar a cifra em uma constante para o modo de criptografia. cipher.init (cifra.encrypt_mode, secureKey, sr); Gerar uma fonte de número aleatória confiável SecureRandom sr = new SecureRandom (); Crie um objeto DESKEYSPEC a partir dos principais dados originais, ou seja, o conteúdo principal da chave que cria o principal deskeyspec dks = new Deskeyspec (chave); A fábrica secreta de chave opera apenas em teclas secretas (simétricas). // Use o modo singleton aqui // secretKeyFactory KeyFactory = SecretKeyFactory.getInstance (DES); SecretKey SecureKey = KeyFactory.GeneratesEcret (DKS); cipher.init (cipher.decrypt_mode, secureKey, sr);Download Endereço do pacote usado em 1 e 2:
Download: Sun.misc.Base64Decoder.
Download: codificação Base64 da Apache, decodificador.
3. Nenhuma codificação é usada, pacote de decodificação
pacote com.soufun.com; importar java.io.ioException; importar java.security.nosuchalgorithMexception; importar java.util.date; importar java.util.hashmap; importação; ax.crypto.spec.deskeyspec; importar javax.crypto.spec.ivparameterspec;/***@autor whd * */classe pública Descrypt {estático secreto SecretKeyFactory = NULL; StackTrace (); = "GBK"; Innercache.put (Chave, valor); } Valor de retorno; } / * * Hex-> str & str-> hexadecimal * / public byte estático [] stringtohex (string ss) {// conversão de string We Byte Digest [] = new Byte [ss.length () / 2]; testring, 16); HexToString (byte b []) {stringbuffer hexstring = new stringbuffer (); hexstring.toString (); 8) {return text.getbytes (utf8); [i / 4] = (byte) Integer.parseint (text.substring (i, i + 2), 16); LONGE A NOVA IOEXCEIRA (TXT '" +"' 'é inválido! "); = nulo; tente { SecretKeyBJ = SecretKey.GenerateSecret (New Deskeyspec (_ConvertKeyV (String) Tecla)); Obj = novo Ivparamespec (_convertyv (string)); (IVParameterspec) IVParamSpecs.get (authiv); (Exceção e) {E.PrintStackTrace (); } retornar hextostring (authToken); SecretKey, cifra cifra = cifra (cifra Obj = null; = SecretKey) SecretKeysPecs.get (AuthKey); byte [] dados = stringtoHex (mensagem); Decrypt (Dados, SecretKey, IV); } public static void main (string [] args) lança exceção { Long Begin = New Date (). GetTime (); .out.println ("EncryptedText:" + EncryptedText); Decrypt (EncryptedText, AuthKey, Authiv);PS: Amigos interessados em criptografia e descriptografia também podem se referir às ferramentas on -line deste site:
Segurança de senha Detecção on -line:
http://tools.vevb.com/password/my_password_safe
Gerador de senha de alta resistência:
http://tools.vevb.com/password/createstrongpassword
Ferramentas de criptografia/descriptografia de Thunder, Express e Tornado URL:
http://tools.vevb.com/password/urlrethunder
Ferramenta de criptografia de algoritmo de hash/hash online:
http://tools.vevb.com/password/hash_encrypt
Online md5/hash/sha-1/sha-2/sha-256/sha-512/sha-3/ripemd-160 ferramenta de criptografia:
http://tools.vevb.com/password/hash_md5_sha
Online SHA1/SHA224/SHA256/SHA384/SHA512 Ferramenta de criptografia:
http://tools.vevb.com/password/sha_encode
Espero que este artigo seja útil para a programação Java de todos.