Java tutorial
/* * 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."); } }