Salve da premettere che sono un neofita,vorrei un aiutino in merito al mio problema.
Ho trovato il seguente codice che permette di firmara tramite funzione hash un file e permette con quale algoritmo generare la funzione di hash.
code
import java.io.*;
import java.security.*;
public class MessageDigestEncoder {
static private byte [] loadByteData (String filename) {
FileInputStream fis = null;
try {
fis = new FileInputStream (filename);
BufferedInputStream bis = new BufferedInputStream (fis);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int ch;
while ((ch = bis.read()) != -1) {
baos.write (ch);
}
return baos.toByteArray();
} catch (IOException e) {
if (fis != null) {
try {
fis.close();
} catch (IOException ee) {
// ignore
}
}
return null;
}
}
static private String hexDigit(byte x) {
StringBuffer sb = new StringBuffer();
char c;
// First nibble
c = (char) ((x >> 4) & 0xf);
if (c > 9) {
c = (char) ((c - 10) + 'a');
} else {
c = (char) (c + '0');
}
sb.append (c);
// Second nibble
c = (char) (x & 0xf);
if (c > 9) {
c = (char)((c - 10) + 'a');
} else {
c = (char)(c + '0');
}
sb.append (c);
return sb.toString();
}
static private String computeDigest (MessageDigest algorithm, String filename) {
byte[] content = loadByteData (filename);
if (content != null) {
algorithm.reset();
algorithm.update (content);
byte digest[] = algorithm.digest();
StringBuffer hexString = new StringBuffer();
int digestLength = digest.length;
for (int i=0;i<digestLength;i++) {
hexString.append (hexDigit(digest[i]));
hexString.append (" ");
}
return hexString.toString();
} else {
return "";
}
}
public static void main (String args[]) {
MessageDigest algorithm = null;
if (args.length < 2) {
System.err.println ("java MessageDigestEncoder SHA-1|MD5 filename(s)");
System.exit (-1);
}
try {
algorithm = MessageDigest.getInstance (args[0]);
} catch (NoSuchAlgorithmException e) {
System.err.println ("Invalid algorithm");
System.err.println ("java MessageDigestEncoder SHA-1|MD5 filename(s)");
System.exit (-2);
}
int argsLength = args.length;
for (int i=1;i<argsLength;i++) {
String digest = computeDigest (algorithm, args[i]);
System.out.println ("filename: " + args[i]);
System.out.println (digest);
System.out.println();
}
}
}
fine code.
per eseguirlo bisogna fare java MessageDigestEncoder MD5 t.txt oppure inserire java MessageDigestEncoder sha1 t.txt
vorrei che che utilizzasse di default l'algoritmo md5 e che carichi direttamente il file da firmare in modo da essere lanciato tramite linea di comando cosi: java MessageDigestEncoder
grazie a tutti.![]()
![]()