Monday, March 12, 2012

Base-64 implementation example

Copy-pasted from: http://www.wikihow.com/Encode-a-String-to-Base64-With-Java

public class Base64 {
 
    private static final String base64code = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
            + "abcdefghijklmnopqrstuvwxyz" + "0123456789" + "+/";
 
    private static final int splitLinesAt = 76;
 
    public static byte[] zeroPad(int length, byte[] bytes) {
        byte[] padded = new byte[length]; // initialized to zero by JVM
        System.arraycopy(bytes, 0, padded, 0, bytes.length);
        return padded;
    }
 
    public static String encode(String string) {
 
        String encoded = "";
        byte[] stringArray;
        try {
            stringArray = string.getBytes("UTF-8");  // use appropriate encoding string!
        } catch (Exception ignored) {
            stringArray = string.getBytes();  // use locale default rather than croak
        }
        // determine how many padding bytes to add to the output
        int paddingCount = (3 - (stringArray.length % 3)) % 3;
        // add any necessary padding to the input
        stringArray = zeroPad(stringArray.length + paddingCount, stringArray);
        // process 3 bytes at a time, churning out 4 output bytes
        // worry about CRLF insertions later
        for (int i = 0; i < stringArray.length; i += 3) {
            int j = ((stringArray[i] & 0xff) << 16) +
                ((stringArray[i + 1] & 0xff) << 8) + 
                (stringArray[i + 2] & 0xff);
            encoded = encoded + base64code.charAt((j >> 18) & 0x3f) +
                base64code.charAt((j >> 12) & 0x3f) +
                base64code.charAt((j >> 6) & 0x3f) +
                base64code.charAt(j & 0x3f);
        }
        // replace encoded padding nulls with "="
        return splitLines(encoded.substring(0, encoded.length() -
            paddingCount) + "==".substring(0, paddingCount));
 
    }
    public static String splitLines(String string) {
 
        String lines = "";
        for (int i = 0; i < string.length(); i += splitLinesAt) {
 
            lines += string.substring(i, Math.min(string.length(), i + splitLinesAt));
            lines += "\r\n";
 
        }
        return lines;
 
    }
    public static void main(String[] args) {
 
        for (int i = 0; i < args.length; i++) {
 
            System.err.println("encoding \"" + args[i] + "\"");
            System.out.println(encode(args[i]));
 
        }
 
    }
 
}

Friday, March 9, 2012

Java sample to do Https

Copied from blog: http://www.java-samples.com/showtutorial.php?tutorialid=1343
 
import java.io.*;
import java.net.*;
import java.security.Security.*;
import com.sun.net.ssl.*;
import com.sun.*; 
 public class sslpost {
       public static void main(String[] args){
        String cuki=new String();
try { 
System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); 
URL url = new URL("https://www.sunpage.com.sg/sso/login.asp"); 
 HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setDoInput(true); 
connection.setDoOutput(true);

connection.setRequestMethod("POST"); 
connection.setFollowRedirects(true); 


String query = "UserID=" + URLEncoder.encode("williamalex@hotmail.com"); 
query += "&"; 
query += "password=" + URLEncoder.encode("password"); 
query += "&"; 
query += "UserChk=" + URLEncoder.encode("Bidder");
// This particular website I was working with, required that the referrel URL should be from this URL
// as specified the previousURL. If you do not have such requirement you may omit it.
query += "&"; 
query += "PreviousURL=" + URLEncoder.encode("https://www.sunpage.com.sg/sso/login.asp"); 


//connection.setRequestProperty("Accept-Language","it"); 
//connection.setRequestProperty("Accept", "application/cfm, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, ///"); 
//connection.setRequestProperty("Accept-Encoding","gzip"); 


connection.setRequestProperty("Content-length",String.valueOf (query.length())); 
connection.setRequestProperty("Content-Type","application/x-www- form-urlencoded"); 
connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)"); 


// open up the output stream of the connection 
DataOutputStream output = new DataOutputStream( connection.getOutputStream() ); 


// write out the data 
int queryLength = query.length(); 
output.writeBytes( query ); 
//output.close();


System.out.println("Resp Code:"+connection.getResponseCode()); 
System.out.println("Resp Message:"+ connection.getResponseMessage()); 


// get ready to read the response from the cgi script 
DataInputStream input = new DataInputStream( connection.getInputStream() ); 


// read in each character until end-of-stream is detected 
for( int c = input.read(); c != -1; c = input.read() ) 
    System.out.print( (char)c ); 
input.close(); 
} 
catch(Exception e) 
{ 
System.out.println( "Something bad just happened." ); 
System.out.println( e ); 
e.printStackTrace(); 
} 
}
}