Solved

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

Posted on 2008-10-13
1
4,312 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
Comment Utility
You can use commons-codec library to encode it http://commons.apache.org/codec
0

Featured Post

Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

Join & Write a Comment

Suggested Solutions

Introduction This article is the second of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers the basic installation and configuration of the test automation tools used by…
Introduction This article is the last of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers our test design approach and then goes through a simple test case example, how …
This theoretical tutorial explains exceptions, reasons for exceptions, different categories of exception and exception hierarchy.
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.

762 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

Need Help in Real-Time?

Connect with top rated Experts

7 Experts available now in Live!

Get 1:1 Help Now