/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
import java.security.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
byte[] hash=patternToHash(pattern);
System.
out.
printf("解鎖資料 SHA-1 Hash : \n\t"); for(int b:hash){
System.
out.
printf("%02x ",
(b
& 0xFF
) ); }
System.
out.
printf("\n串接成字串 : \n\t"); System.
out.
println(byteArrayToString
(hash
)); }
// 將 Byte array Hex code 串成字串
private static String byteArrayToString
(byte[] bytes
){ StringBuilder hash=new StringBuilder();
for(int b:bytes){
hash.
append( String.
format("%02x",
(b
& 0xFF
) ) ); }
return hash.toString();
}
// 取得 Pattern 的 SHA-1 Hash
private static byte[] patternToHash
(String pattern
) { if (pattern == null || pattern.length()==0) {
return null;
}
char[] patternChars = pattern.toCharArray();
byte[] res = new byte[patternChars.length];
for (int i = 0; i < patternChars.length; i++) {
res[i] = (byte)(patternChars[i]-'0');
}
try {
byte[] hash = md.digest(res);
return hash;
return null;
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLnNlY3VyaXR5Lio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoKCQlTdHJpbmcgcGF0dGVybj0iNSw0LDcsNCwxLDgiOwoJCWJ5dGVbXSBoYXNoPXBhdHRlcm5Ub0hhc2gocGF0dGVybik7CgkJCgkJU3lzdGVtLm91dC5wcmludGYoIuino+mOluizh+aWmSBTSEEtMSBIYXNoIDogXG5cdCIpOwoJCWZvcihpbnQgYjpoYXNoKXsKCQkJU3lzdGVtLm91dC5wcmludGYoIiUwMnggIiwgKGIgJiAweEZGICkgKTsKCQl9CgkJU3lzdGVtLm91dC5wcmludGYoIlxu5Liy5o6l5oiQ5a2X5LiyIDogXG5cdCIpOwoJCVN5c3RlbS5vdXQucHJpbnRsbihieXRlQXJyYXlUb1N0cmluZyhoYXNoKSk7Cgl9CgkKCS8vIOWwhyBCeXRlIGFycmF5IEhleCBjb2RlIOS4suaIkOWtl+S4sgoJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGJ5dGVBcnJheVRvU3RyaW5nKGJ5dGVbXSBieXRlcyl7CgkJU3RyaW5nQnVpbGRlciBoYXNoPW5ldyBTdHJpbmdCdWlsZGVyKCk7CgkJZm9yKGludCBiOmJ5dGVzKXsKCQkJaGFzaC5hcHBlbmQoIFN0cmluZy5mb3JtYXQoIiUwMngiLCAoYiAmIDB4RkYpICkgKTsKCQl9CgkJcmV0dXJuIGhhc2gudG9TdHJpbmcoKTsKCX0KCQoJLy8g5Y+W5b6XIFBhdHRlcm4g55qEIFNIQS0xIEhhc2gKCXByaXZhdGUgc3RhdGljIGJ5dGVbXSBwYXR0ZXJuVG9IYXNoKFN0cmluZyBwYXR0ZXJuKSB7CgkgICAgaWYgKHBhdHRlcm4gPT0gbnVsbCB8fCBwYXR0ZXJuLmxlbmd0aCgpPT0wKSB7CgkgICAgICAgIHJldHVybiBudWxsOwoJICAgIH0KCSAKCSAgICBjaGFyW10gcGF0dGVybkNoYXJzID0gcGF0dGVybi50b0NoYXJBcnJheSgpOwoJICAgIGJ5dGVbXSByZXMgPSBuZXcgYnl0ZVtwYXR0ZXJuQ2hhcnMubGVuZ3RoXTsKCSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhdHRlcm5DaGFycy5sZW5ndGg7IGkrKykgewoJICAgICAgICByZXNbaV0gPSAoYnl0ZSkocGF0dGVybkNoYXJzW2ldLScwJyk7CgkgICAgfQoJICAgIHRyeSB7CgkgICAgICAgIE1lc3NhZ2VEaWdlc3QgbWQgPSBNZXNzYWdlRGlnZXN0LmdldEluc3RhbmNlKCJTSEEtMSIpOwoJICAgICAgICBieXRlW10gaGFzaCA9IG1kLmRpZ2VzdChyZXMpOwoJICAgICAgICByZXR1cm4gaGFzaDsKCSAgICB9IGNhdGNoIChOb1N1Y2hBbGdvcml0aG1FeGNlcHRpb24gbnNhKSB7CgkgICAgICAgIHJldHVybiBudWxsOwoJICAgIH0KCX0KfQ==