Java.security

Galera, tenho esse código:

[code]
import java.security.*;
public class KeySha {

public void KeySha(String orig) throws Exception {

  // SHA
  MessageDigest md = MessageDigest.getInstance("SHA-1");

  // Cria a mensagem
   byte[] msg = orig.getBytes();

 // gerando o hash
  md.update(msg);

  // cria a chave para mensagem
  byte[] aMessageDigest = md.digest();

 return new String(aMessageDigest);

}
}[/code]

erro: cannot return is value from method whose result type void

Preciso pegar o retorno.

suponha

class Principal {

KeySha chave = new KeySha(“ozorro”)
}

Grato

Construtor com retorno void? Oops! :slight_smile:

Na verdade, o que vc quer acho que eh um metodo estatico:

[code]public class KeySHA {
public static String encode(String message) {
MessageDigest md = MessageDigest.getInstance(“SHA-1”);
byte[] msg = orig.getBytes();
md.update(msg);
byte[] aMessageDigest = md.digest();

	return new String(aMessageDigest);
}

}
[/code]

Alias, tem mais um probleminha com essa implementacao: a String de retorno vai estar totalmente truncada, caso voce tente dar um System.out.println() nela.

Uma maneira de resolver este problema seria fazer o seguinte:

public String encode(String message) { byte[] bytes = message.getBytes(); MessageDigest md = MessageDigest.getInstance("SHA-1"); md.update(bytes); return new BigInteger(1, md.digest()).toString(16); }

Ah…certo ? agora, pq eu sempre q fazer assim ?
public static String encode(String message)

não posso fazer assim
public static encode(String msg) ?

opa! Java é tipada, é isso ?

Exatamente… vc tem que especificar qual o tipo de retorno do metodo - ou, caso ele nao retorne nada, ‘void’ :slight_smile:

[quote=“cv”]Alias, tem mais um probleminha com essa implementacao: a String de retorno vai estar totalmente truncada, caso voce tente dar um System.out.println() nela.

Uma maneira de resolver este problema seria fazer o seguinte:

public String encode(String message) { byte[] bytes = message.getBytes(); MessageDigest md = MessageDigest.getInstance("SHA-1"); md.update(bytes); return new BigInteger(1, md.digest()).toString(16); }[/quote]
que isso? solução ‘não-use-por-favor’? Use encoding base64 q é mais padronizado que tamanho de papel-higiênico.
Outra coisa, passe explicitamente um charset quando chamar o getBytes e construir tua String senão vai dar problema.

Whoops… :oops:

Sim, truncada como assim ?
Quer dizer se eu criar umja classe:

public class Princiapl {
String chave;
public static void main String(args[]){

chave = “filé”
KeySha objSha = new KeySha(chave)
System.out.println(objSha) ; // certo ou errado ? eu quero o retorno
}
}

[quote=“louds”]
que isso? solução ‘não-use-por-favor’? Use encoding base64 q é mais padronizado que tamanho de papel-higiênico.
Outra coisa, passe explicitamente um charset quando chamar o getBytes e construir tua String senão vai dar problema.[/quote]

Acho intrigante sua sutiliza, hahahahahaha… :shock: :lol:

[size=“14”]ok PLUD ! valeu pelo apoio…apoio como esse…grato! ninguém nasce sabendo, nada como um dia após o outro ![/size]

[quote=“Plud”][quote=“louds”]
que isso? solução ‘não-use-por-favor’? Use encoding base64 q é mais padronizado que tamanho de papel-higiênico.
Outra coisa, passe explicitamente um charset quando chamar o getBytes e construir tua String senão vai dar problema.[/quote]

Acho intrigante sua sutiliza, hahahahahaha… :shock: :lol:[/quote]

Sutileza de uma segunda feira. E eu tava xingando somente o cv, todos aqueles que se sentiram também ofendidos devolvam sua parte da ofença para ele.

Vou me explicar agora.

Isso é a forma mais #%$@#$ de fazem enconding de 1 vetor de bytes para String. Melhor usar base64 como eu falei, google por “+base64 +java”, usa menos espaço, menos cpu e todo mundo conhece.

Quando a usar getBytes() e new String(bytes), isso é 1 grande problema da linguagem java pq a conversão acontece segundo o charset da plataforma, que muda muito de plataforma, windows leste-europeu e windows eua), ou seja, passe 1 charset sempre ou voce pode acabar com 1 desagravel surpresa.

Ow Ow Ow !!! Perai, eu não sacaniei ninguém não, só gostei da frase.

Nada demais, eu não julguei ninguém não…