package com.livingsocial.hive.udf; import com.livingsocial.hive.Base32; import org.apache.hadoop.hive.ql.exec.UDF; import org.apache.hadoop.hive.ql.exec.Description; import org.apache.hadoop.io.Text; import javax.crypto.spec.SecretKeySpec; import javax.crypto.Cipher; @Description( name = "aesdecrypt", value = "_FUNC_(str, key) - Returns unencrypted string based on AES key. Str must be base32hex encoded.", extended = "Example:\n" + " > SELECT aesdecrypt(credit_card_number, 'asd0fjas0df9asjfd09asjdf') FROM credit_cards;\n" + " 123456789456468466" ) public class AESDecrypt extends UDF { public Text evaluate(Text encrypted, Text key) { Text unencrypted = new Text(encrypted); if(encrypted != null && key != null) { try { SecretKeySpec skeySpec = new SecretKeySpec(key.toString().getBytes(), "AES"); Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding"); cipher.init(Cipher.DECRYPT_MODE, skeySpec); byte[] original = cipher.doFinal(Base32.hexdecode(encrypted.toString())); unencrypted.set(original); } catch (Exception e) {}; } return unencrypted; } }