/* 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
{
{
// 可將 Pattern 改成你自己的,用逗號隔開
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;
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLnNlY3VyaXR5Lio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCS8vIOWPr+WwhyBQYXR0ZXJuIOaUueaIkOS9oOiHquW3seeahO+8jOeUqOmAl+iZn+malOmWiwoJCVN0cmluZyBwYXR0ZXJuPSI1LDQsNyw0LDEsOCI7CgkJYnl0ZVtdIGhhc2g9cGF0dGVyblRvSGFzaChwYXR0ZXJuKTsKCQkKCQlTeXN0ZW0ub3V0LnByaW50Zigi6Kej6Y6W6LOH5paZIFNIQS0xIEhhc2ggOiBcblx0Iik7CgkJZm9yKGludCBiOmhhc2gpewoJCQlTeXN0ZW0ub3V0LnByaW50ZigiJTAyeCAiLCAoYiAmIDB4RkYgKSApOwoJCX0KCQlTeXN0ZW0ub3V0LnByaW50ZigiXG7kuLLmjqXmiJDlrZfkuLIgOiBcblx0Iik7CgkJU3lzdGVtLm91dC5wcmludGxuKGJ5dGVBcnJheVRvU3RyaW5nKGhhc2gpKTsKCX0KCQoJLy8g5bCHIEJ5dGUgYXJyYXkgSGV4IGNvZGUg5Liy5oiQ5a2X5LiyCglwcml2YXRlIHN0YXRpYyBTdHJpbmcgYnl0ZUFycmF5VG9TdHJpbmcoYnl0ZVtdIGJ5dGVzKXsKCQlTdHJpbmdCdWlsZGVyIGhhc2g9bmV3IFN0cmluZ0J1aWxkZXIoKTsKCQlmb3IoaW50IGI6Ynl0ZXMpewoJCQloYXNoLmFwcGVuZCggU3RyaW5nLmZvcm1hdCgiJTAyeCIsIChiICYgMHhGRikgKSApOwoJCX0KCQlyZXR1cm4gaGFzaC50b1N0cmluZygpOwoJfQoJCgkvLyDlj5blvpcgUGF0dGVybiDnmoQgU0hBLTEgSGFzaAoJcHJpdmF0ZSBzdGF0aWMgYnl0ZVtdIHBhdHRlcm5Ub0hhc2goU3RyaW5nIHBhdHRlcm4pIHsKCSAgICBpZiAocGF0dGVybiA9PSBudWxsIHx8IHBhdHRlcm4ubGVuZ3RoKCk9PTApIHsKCSAgICAgICAgcmV0dXJuIG51bGw7CgkgICAgfQoJIAoJICAgIGNoYXJbXSBwYXR0ZXJuQ2hhcnMgPSBwYXR0ZXJuLnRvQ2hhckFycmF5KCk7CgkgICAgYnl0ZVtdIHJlcyA9IG5ldyBieXRlW3BhdHRlcm5DaGFycy5sZW5ndGhdOwoJICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGF0dGVybkNoYXJzLmxlbmd0aDsgaSsrKSB7CgkgICAgICAgIHJlc1tpXSA9IChieXRlKShwYXR0ZXJuQ2hhcnNbaV0tJzAnKTsKCSAgICB9CgkgICAgdHJ5IHsKCSAgICAgICAgTWVzc2FnZURpZ2VzdCBtZCA9IE1lc3NhZ2VEaWdlc3QuZ2V0SW5zdGFuY2UoIlNIQS0xIik7CgkgICAgICAgIGJ5dGVbXSBoYXNoID0gbWQuZGlnZXN0KHJlcyk7CgkgICAgICAgIHJldHVybiBoYXNoOwoJICAgIH0gY2F0Y2ggKE5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbiBuc2EpIHsKCSAgICAgICAgcmV0dXJuIG51bGw7CgkgICAgfQoJfQp9