fork(5) download
  1. import javax.xml.bind.DatatypeConverter;
  2. import java.net.URLDecoder;
  3. import java.net.URLEncoder;
  4. import java.util.Date;
  5. import java.text.SimpleDateFormat;
  6.  
  7. import javax.crypto.spec.IvParameterSpec;
  8. import javax.crypto.spec.PBEKeySpec;
  9. import javax.crypto.spec.SecretKeySpec;
  10. import javax.crypto.Cipher;
  11. import javax.crypto.SecretKey;
  12. import javax.crypto.SecretKeyFactory;
  13. import java.security.Key;
  14.  
  15. public class EncryptString {
  16. public static void main(String[] args) {
  17. if(args.length == 4){
  18. String cyphertext=EncryptString.encryptWithPassword(args[0],args[1],args[2],args[3]);
  19. System.out.println("encryptWithPassword(password="+args[0]+",salt="+args[1]+",IV="+args[2]+",plaintext="+args[3]+") => "+cyphertext);
  20. String plaintext=EncryptString.decryptWithPassword(args[0],args[1],args[2],cyphertext);
  21. System.out.println("decryptWithPassword(password="+args[0]+",salt="+args[1]+",iv="+args[2]+",cyphertext="+cyphertext+") => ["+plaintext+"]");
  22. }
  23. else if(args.length == 3){
  24. String cyphertext=EncryptString.encryptWithKey(args[0],args[1],args[2]);
  25. System.out.println("encryptWithKey(key="+args[0]+",IV="+args[1]+",plaintext="+args[2]+") => "+cyphertext);
  26. System.out.println("cyphertext="+DatatypeConverter.printHexBinary(DatatypeConverter.parseBase64Binary(cyphertext)));
  27. String plaintext=EncryptString.decryptWithKey(args[0],args[1],cyphertext);
  28. System.out.println("decryptWithKey(key="+args[0]+",iv="+args[1]+",cyphertext="+cyphertext+") => ["+plaintext+"]");
  29. }
  30. else{
  31. System.err.println("usage: java EncryptString { key | password salt} IV plaintext");
  32. }
  33. }
  34.  
  35.  
  36. public static String encryptWithPassword(String password, String salt, String iv, String plaintext){
  37. String cipherText=null;
  38. byte[] buffer = null;
  39. try{
  40. secretKeySpec=null;
  41. PBEKeySpec pbeKeySpec = new PBEKeySpec(password.toCharArray(),DatatypeConverter.parseHexBinary(salt),1000,128);
  42. SecretKeyFactory secretKeyFactory=SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
  43. //SecretKeyFactory secretKeyFactory=SecretKeyFactory.getInstance("PBEWithMD5AndDES");
  44. SecretKey secretKey=secretKeyFactory.generateSecret(pbeKeySpec);
  45. SecretKeySpec secretKeySpec=new SecretKeySpec(secretKey.getEncoded(),"AES");
  46. System.out.println("secretKeySpec.getEncoded()="+DatatypeConverter.printHexBinary(secretKeySpec.getEncoded())+" secretKeySpec.getAlgorithm()="+secretKeySpec.getAlgorithm());
  47. byte[] ivBytes = DatatypeConverter.parseHexBinary(iv);
  48. IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);
  49. Cipher cipher = javax.crypto.Cipher.getInstance("AES/CBC/PKCS5Padding");
  50. cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivSpec);
  51. buffer = cipher.doFinal(plaintext.getBytes());
  52. System.out.println("plaintext.length()="+plaintext.length()+" buffer.length="+buffer.length);
  53. cipherText=DatatypeConverter.printBase64Binary(buffer);
  54. }
  55. catch (Exception e){
  56. System.err.println(e.getMessage());
  57. e.printStackTrace();
  58. }
  59. return cipherText;
  60. }
  61.  
  62. public static String decryptWithPassword(String password, String salt, String iv, String cyphertext){
  63. String plainText = null;
  64. try{
  65. byte[] buffer = DatatypeConverter.parseBase64Binary(cyphertext);
  66. System.out.println("buffer.length="+buffer.length);
  67. PBEKeySpec pbeKeySpec = new PBEKeySpec(password.toCharArray(),DatatypeConverter.parseHexBinary(salt),1000,128);
  68. SecretKeyFactory secretKeyFactory=SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
  69. //SecretKeyFactory secretKeyFactory=SecretKeyFactory.getInstance("PBEWithMD5AndDES");
  70. SecretKey secretKey=secretKeyFactory.generateSecret(pbeKeySpec);
  71. SecretKeySpec secretKeySpec=new SecretKeySpec(secretKey.getEncoded(),"AES");
  72. byte[] ivBytes = DatatypeConverter.parseHexBinary(iv);
  73. IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);
  74. Cipher cipher = javax.crypto.Cipher.getInstance("AES/CBC/PKCS5Padding");
  75. cipher.init(Cipher.DECRYPT_MODE, secretKeySpec,ivSpec);
  76. plainText = new String(cipher.doFinal(buffer));
  77. }
  78. catch (Exception e){
  79. System.err.println(e.getMessage());
  80. e.printStackTrace();
  81. }
  82. return plainText;
  83. }
  84.  
  85. public static String encryptWithKey(String key, String iv, String plaintext){
  86. String cipherText=null;
  87. byte[] buffer = null;
  88. try{
  89. SecretKeySpec aesKeySpec = new SecretKeySpec(DatatypeConverter.parseHexBinary(key),"AES");
  90. byte[] ivBytes = DatatypeConverter.parseHexBinary(iv);
  91. IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);
  92. Cipher cipher = javax.crypto.Cipher.getInstance("AES/CBC/PKCS5Padding");
  93. cipher.init(Cipher.ENCRYPT_MODE, aesKeySpec, ivSpec);
  94. buffer = cipher.doFinal(plaintext.getBytes());
  95. System.out.println("plaintext.length()="+plaintext.length()+" buffer.length="+buffer.length);
  96. cipherText=DatatypeConverter.printBase64Binary(buffer);
  97. }
  98. catch (Exception e){
  99. System.err.println(e.getMessage());
  100. e.printStackTrace();
  101. }
  102. return cipherText;
  103. }
  104.  
  105. public static String decryptWithKey(String key, String iv, String cyphertext){
  106. String plainText = null;
  107. try{
  108. byte[] buffer = DatatypeConverter.parseBase64Binary(cyphertext);
  109. System.out.println("buffer.length="+buffer.length);
  110. SecretKeySpec aesKeySpec = new SecretKeySpec(DatatypeConverter.parseHexBinary(key),"AES");
  111. byte[] ivBytes = DatatypeConverter.parseHexBinary(iv);
  112. IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);
  113. Cipher cipher = javax.crypto.Cipher.getInstance("AES/CBC/PKCS5Padding");
  114. cipher.init(Cipher.DECRYPT_MODE, aesKeySpec,ivSpec);
  115. plainText = new String(cipher.doFinal(buffer));
  116. }
  117. catch (Exception e){
  118. System.err.println(e.getMessage());
  119. e.printStackTrace();
  120. }
  121. return plainText;
  122. }
  123.  
  124. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
java EncryptString funkytown 412bb037430cbe5c 1F1E0A86C265631195F4B36469761306 "identifier=DSxi0iasfay485sf&email=hone@hone.be&choice_type=PARAM&value=14"
compilation info
Main.java:15: error: class EncryptString is public, should be declared in a file named EncryptString.java
public class EncryptString {
       ^
Main.java:40: error: cannot find symbol
         secretKeySpec=null;
         ^
  symbol:   variable secretKeySpec
  location: class EncryptString
2 errors
stdout
Standard output is empty