Add java version
This commit is contained in:
parent
01b2ca524d
commit
eeb1d97a6f
1 changed files with 87 additions and 0 deletions
87
java-version/main.java
Executable file
87
java-version/main.java
Executable file
|
|
@ -0,0 +1,87 @@
|
|||
import java.io.UnsupportedEncodingException;
|
||||
import java.security.InvalidKeyException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import javax.crypto.Mac;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
import java.util.regex.*;
|
||||
|
||||
public class main {
|
||||
|
||||
public static String HMAC_HASH(byte[] data, byte[] key) {
|
||||
try {
|
||||
SecretKeySpec signingKey = new SecretKeySpec(key, "HmacSHA1");
|
||||
Mac mac = Mac.getInstance("HmacSHA1");
|
||||
mac.init(signingKey);
|
||||
return byte2hex(mac.doFinal(data));
|
||||
} catch (NoSuchAlgorithmException | InvalidKeyException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static String byte2hex(byte[] b) {
|
||||
StringBuilder hs = new StringBuilder();
|
||||
String stmp;
|
||||
for (int n = 0; b != null && n < b.length; n++) {
|
||||
stmp = Integer.toHexString(b[n] & 0XFF);
|
||||
if (stmp.length() == 1) {
|
||||
hs.append('0');
|
||||
}
|
||||
hs.append(stmp);
|
||||
}
|
||||
return hs.toString().toUpperCase();
|
||||
}
|
||||
|
||||
public static byte[] hex2bin(String hex) throws NumberFormatException {
|
||||
if (hex.length() % 2 > 0) {
|
||||
throw new NumberFormatException("Hexadecimal input string must have an even length.");
|
||||
}
|
||||
byte[] r = new byte[hex.length() / 2];
|
||||
for (int i = hex.length(); i > 0;) {
|
||||
r[i / 2 - 1] = (byte) (digit(hex.charAt(--i)) | (digit(hex.charAt(--i)) << 4));
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
private static int digit(char ch) {
|
||||
int r = Character.digit(ch, 16);
|
||||
if (r < 0) {
|
||||
throw new NumberFormatException("Invalid hexadecimal string: " + ch);
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws UnsupportedEncodingException {
|
||||
if (args.length == 1) {
|
||||
String mac = args[0].replaceAll("\\:", "");
|
||||
if (!Pattern.matches("^(\\w+){12}$", mac)) {
|
||||
System.out.println("Invalid Mac Address!");
|
||||
System.exit(1);
|
||||
}
|
||||
try {
|
||||
String key = HMAC_HASH(hex2bin(mac), hex2bin("8544E3B47ECA58F9583043F8")).substring(0, 24);
|
||||
String result = "";
|
||||
int s = 0;
|
||||
for (int i = 0; i < key.length(); i++) {
|
||||
s++;
|
||||
result += key.substring(i, i + 1).toLowerCase();
|
||||
if (s == 4 && i != key.length() - 1) {
|
||||
result += "-";
|
||||
s = 0;
|
||||
}
|
||||
}
|
||||
System.out.println(result);
|
||||
} catch (NumberFormatException ex) {
|
||||
System.out.println("Invalid Mac Address!");
|
||||
System.exit(1);
|
||||
} catch (Exception ex) {
|
||||
System.out.println("Error: " + ex.getMessage());
|
||||
System.exit(1);
|
||||
}
|
||||
} else {
|
||||
System.out.println("Supermicro IPMI License Generator");
|
||||
System.out.println("https://github.com/kasuganosoras/SuperMicro-IPMI-LicenseGenerator");
|
||||
System.out.println("Argument is missing, please append your BMC-MAC after this command.");
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue