Skip to content

Instantly share code, notes, and snippets.

@asaph
asaph / generate_self_signed_cert.sh
Created June 2, 2015 19:59
Generate Self-Signed Cert in PEM format using OpenSSL
#!/bin/sh
openssl req -new -newkey rsa:2048 -nodes -days 365 -x509 -subj "/C=/ST=/L=/O=/CN=localhost" -keyout privkey.pem -out cacert.pem
@asaph
asaph / generate_self_signed_cert.sh
Created June 2, 2015 20:04
Generate Self-Signed Cert in JKS format using Java's keytool
#!/bin/sh
keytool -genkey -validity 365 -alias "youralias" -keyalg "RSA" -keystore .keystore -keypass "yourkeypass" -storepass "yourstorepass" -dname "CN=localhost, OU=, O=, L=, S=, C="
@asaph
asaph / sql2tsv.sh
Created June 2, 2015 20:27
Generate a TSV spreadsheet from a SQL command
#!/bin/sh
mysql databasename -h hostname -u username -p -B -e "select * from mytable;" > /tmp/myreport.tsv
@asaph
asaph / pom.xml
Created April 25, 2016 03:29
Commons Codec Maven Dependency
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
@asaph
asaph / getRandomSecretKey.java
Created April 25, 2016 03:34
Generate a random Google Authenticator compatible 20 byte base32 encoded secret key
public static String getRandomSecretKey() {
SecureRandom random = new SecureRandom();
byte[] bytes = new byte[20];
random.nextBytes(bytes);
Base32 base32 = new Base32();
String secretKey = base32.encodeToString(bytes);
// make the secret key more human-readable by lower-casing and
// inserting spaces between each group of 4 characters
return secretKey.toLowerCase().replaceAll("(.{4})(?=.{4})", "$1 ");
}
@asaph
asaph / getTOTPCode.java
Created April 25, 2016 03:40
Calculate the 6-digit 2fa code based on base32 encoded secret key and the current time
public static String getTOTPCode(String secretKey) {
String normalizedBase32Key = secretKey.replace(" ", "").toUpperCase();
Base32 base32 = new Base32();
byte[] bytes = base32.decode(normalizedBase32Key);
String hexKey = Hex.encodeHexString(bytes);
long time = (System.currentTimeMillis() / 1000) / 30;
String hexTime = Long.toHexString(time);
return TOTP.generateTOTP(hexKey, hexTime, "6");
}
@asaph
asaph / GoogleAuthenticatorDemo.java
Created April 25, 2016 03:43
Generate 6 digit 2fa codes in sync with Google Authenticator
String secretKey = "quu6 ea2g horg md22 sn2y ku6v kisc kyag";
String lastCode = null;
while (true) {
String code = getTOTPCode(secretKey);
if (!code.equals(lastCode)) {
// output a new 6 digit code
System.out.println(code);
}
lastCode = code;
try {
@asaph
asaph / pom.xml
Created April 25, 2016 03:45
Google ZXing QR Code Maven Dependency
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.2.1</version>
</dependency>
@asaph
asaph / getGoogleAuthenticatorBarCode.java
Created April 25, 2016 03:49
Create the data string for the Google Authenticator QR Code
public static String getGoogleAuthenticatorBarCode(String secretKey, String account, String issuer) {
String normalizedBase32Key = secretKey.replace(" ", "").toUpperCase();
try {
return "otpauth://totp/"
+ URLEncoder.encode(issuer + ":" + account, "UTF-8").replace("+", "%20")
+ "?secret=" + URLEncoder.encode(normalizedBase32Key, "UTF-8").replace("+", "%20")
+ "&issuer=" + URLEncoder.encode(issuer, "UTF-8").replace("+", "%20");
} catch (UnsupportedEncodingException e) {
throw new IllegalStateException(e);
}
@asaph
asaph / createQRCode.java
Created April 25, 2016 03:51
Create a QR Code PNG Image
public static void createQRCode(String barCodeData, String filePath, int height, int width)
throws WriterException, IOException {
BitMatrix matrix = new MultiFormatWriter().encode(barCodeData, BarcodeFormat.QR_CODE,
width, height);
try (FileOutputStream out = new FileOutputStream(filePath)) {
MatrixToImageWriter.writeToStream(matrix, "png", out);
}
}