dimanche 12 juin 2011

Un script qui automatise la signature des jars

J'écris actuellement le fichier JNLP de l'UwosManager pour pouvoir le lancer via Java Webstart.

Pour pouvoir le tester sans soucis, je dois signer tous les jars, je me suis basé sur ce tutoriel :
Howto selfsign jar files.

Seulement comme je passe mon temps à rebuilder, si je veux tester, il faut que je resigne à chaque fois, plutôt que de le faire à la main, j'ai perdu un peu de mon temps à écrire un script bash pour le faire à ma place :D et comme je suis très partageur : jarsigner.sh !

#!/bin/sh
# Auto JarSigner
# signs all jars in the current working directory
# CC BY-NC-SA 2.0 
# http://creativecommons.org/licenses/by-nc-sa/2.0/
# authors :
## JB (http://www.mrhide.fr)

if [ $# -ne 3 ]
then
  echo "${0}, signs all jars in the current working directory"
  echo
  echo "Usage :"
  echo "  ${0} <key store> <store pass> <key alias>"
  echo "  see http://wiki.plexinfo.net/index.php?title=How_to_sign_JAR_files"
  exit 0
fi

for file in *.jar
do
  echo $file
  if [ -w $file ]
  then
    test=`jarsigner -verify ${file} | grep verified`
    if [ ${#test} -eq 0 ]
    then
      echo "  not signed ... signing"
      jarsigner -keystore $1 -storepass $2 $file $3
    else
      echo "  already signed"
    fi
  fi
done

exit 0

mardi 23 novembre 2010

Construire ses fontes dans swing avec Java

Je galérais à trouver comment avoir un certain rendu dan mon jlabel, puis j'ai trouvé ce programme magnifique, il m'a évité les maux de tête ce soir :

http://tips4java.wordpress.com/2008/11/30/visual-font-designer/

Lancez le JNLP, dans le premier jcombobox mettez en standalone puis créez votre rendu, et le code associé est dans le Textarea en dessous :D .

vendredi 17 septembre 2010

Java Humour

Comment comprendre toutes ces exceptions du langage java ... Ce site va bien vous aider LOL .

Par exemple :
NoSuchFieldException You are trying to have a picknick on a field that does not exist ...

http://rymden.nu/exceptions.html

mercredi 1 septembre 2010

Java 6u23

Voilà une update impaire avec son (petit) lot de bugfixes :

http://download.java.net/jdk6/6u23/promoted/b01/changes/JDK6u23.b01.list.html

Uniquement des bugs d'interface. Java est si proche de la perfection ... ?

mardi 31 août 2010

Java : Empreinte MD5 et SHA-1 d'un fichier

Voici comment faire, la source est sous copyleft (domaine public).

Petit rappel : il existe une faille par collision dans MD5 donc utilisez SHA-1 (même s'il est moins rapide)

FileHashSum.java

J'en profite pour inaugurer la fraîche installation du Synthaxe Highlighter :

import java.io.File;
import java.io.FileInputStream;
import java.security.DigestInputStream;
import java.security.MessageDigest;

/**
 * Calcule et compare les empreintes MD5 et SHA-1 des fichiers.
 *
 * @author Mr-Hide (JB, http://www.mrhide.fr)
 * copyleft
 */
public class FileHashSum {
        /**
         * compare le sha1sum donné avec l'empreinte du fichier local file.
         * @param file le fichier dont on doit calculer l'empreinte sha1
         * @param sha1sum l'empreinte à comparer
         * @return true si l'empreinte du fichier correspond à sha1sum
         */
        public static boolean compareSha1sum(File file, String sha1sum) {
                boolean res = false;
		if (sha1sum.equals(sha1sum(file))) {
                        res = true;
                }
                return res;
        }

        /**
         * Retourne l'empreinte sha1 de fichier file ou null si le
         * fichier n'a pas pu être lu.
         * @param file le fichier dont on doit calculer l'empreinte sha1
         * @return l'empreinte sha1
         */
        public static String sha1sum(File file){
                String localSha1Sum = null;
                if (file.exists() && file.isFile() && file.canRead()){
			try {
				MessageDigest md = MessageDigest.getInstance("SHA-1");
				DigestInputStream dis = new DigestInputStream(new FileInputStream(file), md);
				dis.on(true);

				while (dis.read() != -1){
					;
				}
				byte[] b = md.digest();
				localSha1Sum = getHexString(b);
			} catch (Exception ex) {
				ex.printStackTrace();
			}
		} else {
			System.out.println("impossible de trouver le fichier : "+file.getAbsolutePath());
		}
                return localSha1Sum;
        }

        /**
         * Compare le md5sum donné avec l'empreinte du fichier local file.
         * L'utilisation de MD5 est déconseillée ! Il existe en effet une faille de sécurité par collision sur MD5
         * Utilisez plutôt SHA-1.
         * @param file le fichier dont on doit calculer l'empreinte md5
         * @param sha1sum l'empreinte à comparer
         * @return true si l'empreinte du fichier correspond à md5sum
         */
        public static boolean compareMd5sum(File file, String md5sum) {
                boolean res = false;
		if (md5sum.equals(md5sum(file))){
                        res = true;
                }
                return res;
        }

        /**
         * Retourne l'empreinte md5 de fichier file ou null si le
         * fichier n'a pas pu être lu.
         * @param file le fichier dont on doit calculer l'empreinte md5
         * @return l'empreinte md5
         */
        public static String md5sum(File file) {
                String localMd5Sum = null;
                if (file.exists() && file.isFile() && file.canRead()){
			try {
				MessageDigest md = MessageDigest.getInstance("MD5");
				DigestInputStream dis = new DigestInputStream(new FileInputStream(file), md);
				dis.on(true);

				while (dis.read() != -1){
					;
				}
				byte[] b = md.digest();
				localMd5Sum = getHexString(b);
			} catch (Exception ex) {
				ex.printStackTrace();
			} 
		} else {
			System.out.println("impossible de trouver le fichier : "+file.getAbsolutePath());
		}
                return localMd5Sum;
        }

	private static String getHexString(byte[] bytes) {
		StringBuilder sb = new StringBuilder(bytes.length*2);
		for (byte b : bytes) {
                        if (b <= 0x0F && b >= 0x00) { // On rajoute le 0 de poid fort ignoré à la conversion.
                                sb.append('0');
                        }
			sb.append( String.format("%x", b) );
		}
		return sb.toString();
	}
}

Licence

Contrat Creative Commons

Propulsé par Dotclear