Solved

How to create a SHA1, base64 encoding password in java?

Posted on 2008-10-13
1
4,381 Views
Last Modified: 2008-10-23
I am trying to create a password that is first converted to uppercase, then Unicode it in little-endian UTF16,
then SHA1 it, then base64 encode it.  I will be displaying the password as a string.

Currently, I am getting output that looks like I have done it correctly, but am still unable to connect via https and it returns an invalid username/password..  So, I wanted to ensure my password encryption was correct.  I know Java doesn't support base64 encoding in the standard API, but found a routine that is suppose to do the trick.  See the attached code and let me know if this is correct.




static final String baseTable = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
 
// encrypt password
            String sPassword = "AVI5580!";
            byte[] unicodeValue = sPassword.getBytes( "utf-16" );
            md = MessageDigest.getInstance( "SHA1" );
            md.update( unicodeValue );
            byte[] encodedPassword = md.digest();
            String encodedString = encode( encodedPassword );
 
 
// encode method
 public static String encode( byte[] bytes )
    {
        StringBuffer tmp = new StringBuffer();
        int i = 0;
        byte pos;
        for (i = 0; i < bytes.length - bytes.length % 3; i += 3) {
            pos = (byte) (bytes[i] >> 2 & 63);
            tmp.append( baseTable.charAt( pos ) );
            pos = (byte) (((bytes[i] & 3) << 4) + (bytes[i + 1] >> 4 & 15));
            tmp.append( baseTable.charAt( pos ) );
            pos = (byte) (((bytes[i + 1] & 15) << 2) + (bytes[i + 2] >> 6 & 3));
            tmp.append( baseTable.charAt( pos ) );
            pos = (byte) (bytes[i + 2] & 63);
            tmp.append( baseTable.charAt( pos ) );
            // Add a new line for each 76 chars.
            // 76*3/4 = 57
            if ((i + 2) % 56 == 0) {
                tmp.append( "\r\n" );
            }
        }
        if (bytes.length % 3 != 0) {
            if (bytes.length % 3 == 2) {
                pos = (byte) (bytes[i] >> 2 & 63);
                tmp.append( baseTable.charAt( pos ) );
                pos = (byte) (((bytes[i] & 3) << 4) + (bytes[i + 1] >> 4 & 15));
                tmp.append( baseTable.charAt( pos ) );
                pos = (byte) ((bytes[i + 1] & 15) << 2);
                tmp.append( baseTable.charAt( pos ) );
                tmp.append( "=" );
            } else if (bytes.length % 3 == 1) {
                pos = (byte) (bytes[i] >> 2 & 63);
                tmp.append( baseTable.charAt( pos ) );
                pos = (byte) ((bytes[i] & 3) << 4);
                tmp.append( baseTable.charAt( pos ) );
                tmp.append( "==" );
            }
        }
        return tmp.toString();
    }

Open in new window

0
Comment
Question by:cindymccartney
1 Comment
 
LVL 23

Accepted Solution

by:
Ajay-Singh earned 500 total points
ID: 22722684
You can use commons-codec library to encode it http://commons.apache.org/codec
0

Featured Post

Problems using Powershell and Active Directory?

Managing Active Directory does not always have to be complicated.  If you are spending more time trying instead of doing, then it's time to look at something else. For nearly 20 years, AD admins around the world have used one tool for day-to-day AD management: Hyena. Discover why

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

An old method to applying the Singleton pattern in your Java code is to check if a static instance, defined in the same class that needs to be instantiated once and only once, is null and then create a new instance; otherwise, the pre-existing insta…
By the end of 1980s, object oriented programming using languages like C++, Simula69 and ObjectPascal gained momentum. It looked like programmers finally found the perfect language. C++ successfully combined the object oriented principles of Simula w…
The viewer will learn how to implement Singleton Design Pattern in Java.
This tutorial explains how to use the VisualVM tool for the Java platform application. This video goes into detail on the Threads, Sampler, and Profiler tabs.

809 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question