MD5Salt.kt 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. package cn.gygxzc.envir.utils
  2. import org.slf4j.LoggerFactory
  3. import java.security.MessageDigest
  4. /**
  5. *
  6. * @author NorthLan
  7. * @date 2018/3/5
  8. * @url https://noahlan.com
  9. */
  10. class MD5Salt {
  11. companion object {
  12. private val logger = LoggerFactory.getLogger(MD5Salt::class.java)
  13. private const val ALGORITHM = "MD5"
  14. private const val CUT_SYMBOL = "#"
  15. /**
  16. * md5 盐值加密字符串
  17. * @param salt
  18. * 盐值
  19. * @param rawText
  20. * 需要加密的字符串
  21. * @return
  22. */
  23. fun md5SaltEncode(salt: String, rawText: String): String? {
  24. return MD5Salt(salt, ALGORITHM).encode(rawText)
  25. }
  26. /**
  27. * 判断md5 盐值加密内容是否正确
  28. * @param salt
  29. * 盐值
  30. * @param encodeText
  31. * 加密后的文本内容
  32. * @param rawText
  33. * 加密前的文本内容
  34. * @return
  35. */
  36. fun md5SaltValid(salt: String, encodeText: String, rawText: String): Boolean {
  37. return MD5Salt(salt, ALGORITHM).isValid(encodeText, rawText)
  38. }
  39. }
  40. private var salt: String? = null
  41. private var algorithm: String? = null
  42. private constructor()
  43. constructor(salt: String, algorithm: String) {
  44. this.salt = salt
  45. this.algorithm = algorithm
  46. }
  47. /**
  48. * 字符串盐值加密
  49. * @param rawText
  50. * 需要加密的字符串
  51. * @return
  52. */
  53. fun encode(rawText: String): String? {
  54. try {
  55. val md = MessageDigest.getInstance(this.algorithm)
  56. //加密后的字符串
  57. return Byte2Hex.byte2Hex(md.digest(mergeRawTextAndSalt(rawText).toByteArray()))
  58. } catch (e: Exception) {
  59. logger.error(" MD5Salt encode exception.")
  60. e.printStackTrace()
  61. }
  62. return null
  63. }
  64. /**
  65. *
  66. *
  67. *
  68. * 判断加密内容是否正确
  69. *
  70. *
  71. * @param encodeText
  72. * 加密后的文本内容
  73. * @param rawText
  74. * 加密前的文本内容
  75. * @return
  76. */
  77. fun isValid(encodeText: String, rawText: String): Boolean {
  78. return this.encode(rawText).equals(encodeText)
  79. }
  80. /**
  81. *
  82. *
  83. *
  84. * 合并混淆盐值至加密内容
  85. *
  86. *
  87. * @param rawText
  88. * 需要加密的字符串
  89. * @return
  90. */
  91. private fun mergeRawTextAndSalt(rawText: String?): String {
  92. var tmp = rawText
  93. if (tmp == null) {
  94. tmp = ""
  95. }
  96. return if (this.salt == null || "" == this.salt) {
  97. tmp
  98. } else {
  99. val mt = StringBuffer()
  100. mt.append(tmp)
  101. mt.append(CUT_SYMBOL)
  102. mt.append(this.salt)
  103. mt.toString()
  104. }
  105. }
  106. }