com.rockagen.gnext.tool.Crypto.java Source code

Java tutorial

Introduction

Here is the source code for com.rockagen.gnext.tool.Crypto.java

Source

/*
 * Copyright 2014-2015 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.rockagen.gnext.tool;

import com.rockagen.commons.util.CommUtil;
import com.rockagen.commons.util.MDUtil;
import org.apache.commons.codec.digest.HmacUtils;

/**
 * Crypto utils
 * 
 * @author RA
 */
public class Crypto {

    /**
     * Obtain Hex salt
     * 
     * @return 32 bytes salt
     */
    public static String nextSalt() {
        return CommUtil.generateRandomCode(32).toLowerCase();
    }

    /**
     * User passwd
     * <p> hmac(md5(hmac(salt,value)),value)</p>
     * @param salt slat
     * @param value value
     * @return passwd
     */
    public static String passwd(String salt, String value) {
        String a = hmacSha1Hex(salt, value);
        String key = MDUtil.md5Hex(a);
        String result = hmacSha1Hex(key, value);
        return result;
    }

    /**
     * Check password is valid?
     * @param encPass - a pre-encoded password
     * @param rawPass - a raw password to encode and compare against the pre-encoded password
     * @param salt - a salt value.
     * @return true if valid
     */
    public static boolean passwdValid(String encPass, String rawPass, String salt) {
        return encPass.equals(passwd(salt, rawPass));
    }

    /**
     * Hmac with sha256 hex
     * @param key key
     * @param value value
     * @return hmac String
     */
    public static String hmacSha256Hex(String key, String value) {
        checkArguments(key, value);
        return HmacUtils.hmacSha1Hex(key, value);

    }

    /**
     * Hmac with sha1 hex
     * @param key key
     * @param value value
     * @return hmac String
     */
    public static String hmacSha1Hex(String key, String value) {
        checkArguments(key, value);
        return HmacUtils.hmacSha1Hex(key, value);

    }

    /**
     * Default hmac(HmacSha1)
     * @param key key
     * @param value value
     * @return hmac String
     */
    public static String hmac(String key, String value) {
        return hmacSha1Hex(key, value);
    }

    /**
     * Check encrypt arguments
     * 
     * @param arg1 string
     * @param arg2 string
     */
    private static void checkArguments(String arg1, String arg2) {
        if (CommUtil.isBlank(arg1))
            throw new IllegalArgumentException("value must not be null or empty.");
        if (CommUtil.isBlank(arg2))
            throw new IllegalArgumentException("value must not be null or empty.");
    }

}