Criando Keys

12 respostas
L

Bom Dia!

Estou pesquisando sobre como criar um chave a partir de um algoritmo especificono, neste caso o DES. Quero criar a chave passando uma string para ele . Assim ele cria a chave a partir desta string…
Será que alguem pode me dar uma luz?

Positive Vibrations
Lucas Ferst

12 Respostas

R

Bem, bem vindo a familia do PJ… :grin:

Cara, se eu entendi bem, vc que pegar uma string e transformá-la em inteiro, é isso?

Bem, se for isso vc pode estar convertendo

int chave = Integer.parseInt(SuaString);

Espero ter ajudado…

M

lgferst, qual é exatamente a sua dúvida ?
Você quer desenvolver para uso acadêmico ? SDES ou DES mesmo.
Você quer apresentar os valores em binário ou texto mesmo?

Abraço,
Maicon

L

Poh galera valew pela atenção…

Seguinte…

Estou querendo criptografar algumas coisas…tipo senha…
Então quando eu uso a classe Cipher ela me pede uma chave para criptografar algo…ateh ai tudo bem…
Mas eu quero gerar esta chave…
Por exemplo…quero gerar esta chave a partir de uma string usando o algoritmo DES mesmo

escrevo uma palavra de 8 bits e ele gera uma chave para mim depois utiliza-la para criptografar o que eu quiser…
Não sei se consegui passar minha ideia para vcs…

M

lgferst, deixa-me entender uma coisa.

Vc quer utilizar o DES ? Ele requer uma chave de 56bits e encripta textos de 64bits, o SDES sim que tem chave de 10bits e encripta texto de 8bits.
Agora eu pergunto novamente é o DES ou SDES que queres utilizar ?

Hah, o algoritmo DES é de criptografia e não de geração de chave !
Explique melhor seu problema… :wink:

Abraço,
Maicon

M

Veja pra mim se não é nisso que você está se baseando !
http://homepage.smc.edu/morgan_david/vpn/website-perry-sdes/all-sdes.html

Abraço,
Maicon

L

Sim…desculpa…

Eu quero gerar uma chave de 64bits apartir de uma string…para depois poder usar ela para criptografar e descriptografar textos com o algoritmo DES…

Desculpe a enrrolação… :sad:

M

Certo,

Vc vai ter que pesquisar sobre como transformar os caracteres em binário e depois fazer todos os cálculos relacionados…

Qual seria realmente a dúvida para desenvolver o algoritmo ?

Hah, tem alguns algoritmos de exemplo, acho até que já está tudo prontinho, não cheguei a estudar os sources… E tem até sobre o 3DES que é 3 vezes mais seguro. hehehe
http://www.orlingrabbe.com/3des2_java.htm
http://javaalmanac.com/egs/javax.crypto/ListCipher.html?l=rel

Abraço,
Maicon

L

Valew brother…

Mas tem um porem ai e é nisso que eu estou me quebrando

Para gerar a chave ele usa um numero randomico ou seja, se eu perder a chave por exemplo…mas tenho o texto que eu usei para gerar a chave…
Se eu mandar gerar a chave de novo ele vai gerar uma outra chave pois as chances de ele usar o mesmo numero randomico são muito pequenas

Ou seja…eu tenho uma string e quero que sempre quando eu mande gerar a chave o valor seja igual…

Nestes links que tu me passou…se eu rodo uma vez ele gera uma chave…se rodo mais uma vez ele gera outra com outro valor…

Eh nisso que eu estou me quebrando…

Valew pela atenção
Positive Vibrations

M

É o seguinte: o DES tem esta caracteristica, se vc tirar isso já não vai ser mais DES… :lol:
-> Mas se quiser gerar sempre a mesma chave não vais ter tanta segurança, mas se vc quiser assim, você terá q substituir os random´s por valores fixos… pronto !

Abraço,
Maicon

H

“lgferst”:
Bom Dia!

Estou pesquisando sobre como criar um chave a partir de um algoritmo especificono, neste caso o DES. Quero criar a chave passando uma string para ele . Assim ele cria a chave a partir desta string…
Será que alguem pode me dar uma luz?

Positive Vibrations
Lucas Ferst

As funções hash seguras têm essa propriedade. A cifra MD5 é a mais usada.

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * Encodes a string using MD5 hashing
 */
public class MD5
{
  /**
   * Encodes a string
   *
   * @param str String to encode
   * @return Encoded String
   * @throws NoSuchAlgorithmException
   */
  public static String crypt(String str) 
    throws NoSuchAlgorithmException
  {
    if (str == null || str.length() == 0)
      throw new IllegalArgumentException(
        "String to encript cannot be null or zero length");
    MessageDigest md = MessageDigest.getInstance("MD5");
    md.update(str.getBytes());
    byte[] hash = md.digest();
    StringBuffer hexString = new StringBuffer();
    for (int i = 0; i < hash.length; i++)
    {
      if((0xff & hash[i]) < 0x10)
        hexString.append(
          "0" + Integer.toHexString((0xFF & hash[i])));
      else
        hexString.append(Integer.toHexString(0xFF & hash[i]));
    }
    return hexString.toString();
  }
}
M

Isso deve funcionar:

import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.*;

public class Encrypt {
    /**
    * Inicializa a classe Encrypt 
    * @param encoded A variável contendo os valores a serem encriptados em DES no modo ECB e com padding PKCS5
    * @param key A chave utilizada na encryptação
    */
    String key;
    String encoded;
    Encrypt(String encoded, String key) {
        this.key     = key;
        this.encoded = encoded;
    }
    byte [] decrypt() throws Exception {
        byte [] toEncode = encoded.getBytes();
        Provider  sunJce = new com.sun.crypto.provider.SunJCE();
        Security.addProvider(sunJce);
        SecretKeyFactory keyFac;
        Cipher           cipher;
        SecretKey        secretKey;
        DESKeySpec       keySpec;
        keySpec   = new DESKeySpec(key.getBytes());
        keyFac    = SecretKeyFactory.getInstance("DES");
        secretKey = keyFac.generateSecret(keySpec);
        cipher    = Cipher.getInstance("DES/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        return cipher.doFinal(toEncode);
    }
}

Era minha classe de decrypt, mudei pra encrypt agora pra voce e nao testei, talvez tenha algum erro de nome de variavel/metodo ou algo assim só, mas essa é a lógica…

L

Poh…era isso mesmo…

Muito obrigado pela atenção de todos…

ja vi que so tem feras por aqui…

Postivie vibrations

Lucas Ferst

Criado 14 de setembro de 2004
Ultima resposta 22 de set. de 2004
Respostas 12
Participantes 5