| 1 18 19 package com.martiansoftware.nailgun.examples; 20 21 import java.security.MessageDigest ; 22 import java.security.Provider ; 23 import java.security.Security ; 24 import java.util.Iterator ; 25 import java.util.Set ; 26 27 import com.martiansoftware.nailgun.NGContext; 28 29 37 public class Hash { 38 39 private static final char[] HEXCHARS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; 41 42 50 private static Set getCryptoImpls(String serviceType) { 51 Set result = new java.util.TreeSet (); 52 53 Provider [] providers = Security.getProviders(); 55 for (int i=0; i<providers.length; i++) { 56 Set keys = providers[i].keySet(); 58 for (Iterator it = keys.iterator(); it.hasNext(); ) { 59 String key = (String )it.next(); 60 key = key.split(" ")[0]; 61 62 if (key.startsWith(serviceType+".")) { 63 result.add(key.substring(serviceType.length()+1)); 64 } else if (key.startsWith("Alg.Alias."+serviceType+".")) { 65 result.add(key.substring(serviceType.length()+11)); 67 } 68 } 69 } 70 return (result); 71 } 72 73 79 public static void nailMain(NGContext context) throws java.security.NoSuchAlgorithmException , java.io.IOException { 80 String [] args = context.getArgs(); 81 82 if (args.length == 0) { 83 Set algs = getCryptoImpls("MessageDigest"); 85 for (Iterator i = algs.iterator(); i.hasNext();) { 86 context.out.println(i.next()); 87 } 88 } else { 89 MessageDigest md = MessageDigest.getInstance(args[0]); 91 92 byte[] b = new byte[1024]; 93 int bytesRead = context.in.read(b); 94 while (bytesRead != -1) { 95 md.update(b, 0, bytesRead); 96 bytesRead = System.in.read(b); 97 } 98 byte[] result = md.digest(); 99 100 StringBuffer buf = new StringBuffer (); 102 for (int i = 0; i < result.length; ++i) { 103 buf.append(HEXCHARS[(result[i] >> 4) & 0x0f]); 104 buf.append(HEXCHARS[result[i] & 0x0f]); 105 } 106 context.out.println(buf); 107 } 108 } 109 110 } 111 | Popular Tags |