package cn.gygxzc.envir.utils import org.slf4j.LoggerFactory import java.security.MessageDigest /** * * @author NorthLan * @date 2018/3/5 * @url https://noahlan.com */ class MD5Salt { companion object { private val logger = LoggerFactory.getLogger(MD5Salt::class.java) private const val ALGORITHM = "MD5" private const val CUT_SYMBOL = "#" /** * md5 盐值加密字符串 * @param salt * 盐值 * @param rawText * 需要加密的字符串 * @return */ fun md5SaltEncode(salt: String, rawText: String): String? { return MD5Salt(salt, ALGORITHM).encode(rawText) } /** * 判断md5 盐值加密内容是否正确 * @param salt * 盐值 * @param encodeText * 加密后的文本内容 * @param rawText * 加密前的文本内容 * @return */ fun md5SaltValid(salt: String, encodeText: String, rawText: String): Boolean { return MD5Salt(salt, ALGORITHM).isValid(encodeText, rawText) } } private var salt: String? = null private var algorithm: String? = null private constructor() constructor(salt: String, algorithm: String) { this.salt = salt this.algorithm = algorithm } /** * 字符串盐值加密 * @param rawText * 需要加密的字符串 * @return */ fun encode(rawText: String): String? { try { val md = MessageDigest.getInstance(this.algorithm) //加密后的字符串 return Byte2Hex.byte2Hex(md.digest(mergeRawTextAndSalt(rawText).toByteArray())) } catch (e: Exception) { logger.error(" MD5Salt encode exception.") e.printStackTrace() } return null } /** * * * * 判断加密内容是否正确 * * * @param encodeText * 加密后的文本内容 * @param rawText * 加密前的文本内容 * @return */ fun isValid(encodeText: String, rawText: String): Boolean { return this.encode(rawText).equals(encodeText) } /** * * * * 合并混淆盐值至加密内容 * * * @param rawText * 需要加密的字符串 * @return */ private fun mergeRawTextAndSalt(rawText: String?): String { var tmp = rawText if (tmp == null) { tmp = "" } return if (this.salt == null || "" == this.salt) { tmp } else { val mt = StringBuffer() mt.append(tmp) mt.append(CUT_SYMBOL) mt.append(this.salt) mt.toString() } } }