AES加解密工具类
import android.util.Base64
import javax.crypto.Cipher
import javax.crypto.spec.IvParameterSpec
import javax.crypto.spec.SecretKeySpec
object AESUtils {
private const val OFFSET = 0
private const val KEY_LEN = 16
private const val AES_KEY = "aes$%@CVBGgdt12q"
fun encrypt(encryptStr: String, encryptKey: String = AES_KEY): String {
return try {
val secretKey = SecretKeySpec(encryptKey.toByteArray(charset("UTF-8")), "AES")
val iv = IvParameterSpec(encryptKey.toByteArray(), OFFSET, KEY_LEN)
val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding")
cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv)
val encryptData = cipher.doFinal(encryptStr.toByteArray(charset("UTF-8")))
Base64.encodeToString(encryptData, Base64.NO_WRAP)
} catch (e: Exception) {
encryptStr
}
}
fun decrypt(decryptStr: String, decryptKey: String = AES_KEY): String {
return try {
val secretKey = SecretKeySpec(decryptKey.toByteArray(charset("UTF-8")), "AES")
val iv = IvParameterSpec(decryptKey.toByteArray(), OFFSET, KEY_LEN)
val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding")
cipher.init(Cipher.DECRYPT_MODE, secretKey, iv)
val decryptData = cipher.doFinal(Base64.decode(decryptStr, Base64.NO_WRAP))
String(decryptData, charset("UTF-8"))
} catch (e: Exception) {
decryptStr
}
}
}
DES加解密工具类
import javax.crypto.Cipher
import javax.crypto.SecretKeyFactory
import javax.crypto.spec.DESKeySpec
import javax.crypto.spec.IvParameterSpec
import javax.crypto.spec.SecretKeySpec
object DESUtils {
private val iv1 = byteArrayOf(18, 52, 86, 120, -112, -85, -51, -17)
private const val DES_KEY = "PbNcUWRf"
fun encrypt(encryptString: String, encryptKey: String = DES_KEY): String {
return try {
val iv = IvParameterSpec(iv1)
val dks = DESKeySpec(encryptKey.toByteArray())
val keyFactory = SecretKeyFactory.getInstance("DES")
val key = keyFactory.generateSecret(dks)
val cipher = Cipher.getInstance("DES/CBC/PKCS5Padding")
cipher.init(Cipher.ENCRYPT_MODE, key, iv)
String(EncodeUtils.base64Encode(cipher.doFinal(encryptString.toByteArray(charset("UTF-8")))))
} catch (var7: Exception) {
encryptString
}
}
fun decrypt(decryptString: String, decryptKey: String = DES_KEY): String {
return try {
val iv = IvParameterSpec(iv1)
val key = SecretKeySpec(decryptKey.toByteArray(charset("UTF-8")), "DES")
val cipher = Cipher.getInstance("DES/CBC/PKCS5Padding")
cipher.init(Cipher.DECRYPT_MODE, key, iv)
String(cipher.doFinal(EncodeUtils.base64Decode(decryptString)))
} catch (var7: Exception) {
decryptString
}
}
}
MD5加密工具类
import java.io.File
import java.io.FileInputStream
import java.io.IOException
import java.math.BigInteger
import java.nio.channels.FileChannel
import java.security.MessageDigest
object MD5Utils {
private val hexDigits =
charArrayOf('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f')
fun String.md5(): String {
val md5 = MessageDigest.getInstance("MD5")
return BigInteger(1, md5.digest(toByteArray())).toString(16).padStart(32, '0')
}
fun getMD5(str: String): String? {
return try {
val md5 = MessageDigest.getInstance("MD5")
val byteArray = str.toByteArray(charset("UTF-8"))
val md5Bytes = md5.digest(byteArray)
val hexValue = StringBuffer()
for (i in md5Bytes.indices) {
val value = md5Bytes[i].toInt() and 0xff
if (value < 16) hexValue.append("0")
hexValue.append(Integer.toHexString(value))
}
hexValue.toString()
} catch (e: Exception) {
e.printStackTrace()
null
}
}
@Throws(IOException::class)
fun getFileMD5String(file: File): String {
var inputStream: FileInputStream? = null
try {
val messageDigest = MessageDigest.getInstance("MD5")
inputStream = FileInputStream(file)
val ch = inputStream.channel
val byteBuffer = ch.map(FileChannel.MapMode.READ_ONLY, 0, file.length())
messageDigest.update(byteBuffer)
return bufferToHex(messageDigest.digest())
} catch (e: Exception) {
e.printStackTrace()
} finally {
inputStream?.close()
}
return ""
}
@Throws(IOException::class)
fun getFileMD5String(fileName: String): String {
val f = File(fileName)
return getFileMD5String(f)
}
private fun bufferToHex(bytes: ByteArray): String {
return bufferToHex(bytes, 0, bytes.size)
}
private fun bufferToHex(bytes: ByteArray, m: Int, n: Int): String {
val stringBuffer = StringBuffer(2 * n)
val k = m + n
for (l in m until k) {
appendHexPair(bytes[l], stringBuffer)
}
return stringBuffer.toString()
}
private fun appendHexPair(bt: Byte, stringBuffer: StringBuffer) {
val c0 = hexDigits[bt.toInt() and 0xf0 shr 4]
val c1 = hexDigits[bt.toInt() and 0xf]
stringBuffer.append(c0)
stringBuffer.append(c1)
}
}
RSA加解密工具类
import org.bouncycastle.util.encoders.Base64;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import javax.crypto.Cipher;
public class RSAUtil {
public static final String serverPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtf6dGGDdc5ObUhvcXFQg" +
"tRoCaYj425+eXWpqsnTVGL2tEaolGKw/cDME+nnMTKazFuhpaVk44HokdjQm8t12" +
"7ep8G0wD8ewVO/GInZYRdNa8Hu2mtVB2eOVwzjpTGiW5xlV/gbzVZkpvYm4AJVZ3" +
"Wr9CM/ORfhm7KCc2FJPx7SqQgBFaPqcIL3MqORqEiVrc2SdVhdluhN9D9P/2Zc1u" +
"CvdNSN+eC9u2q+MtrdmMXBeTHPlhbZIH0hKuyYTyWcdlI0d3qbpy3d014CNQIajs" +
"ylWWGD63vFWk9vWGlsVN6uoK5uomSqWq+1tmxlEI7EyeOKDJWOUsya7dXbYFktic" +
"bwIDAQAB";
public static final String serverPrivateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC1/p0YYN1zk5tSG" +
"9xcVCC1GgJpiPjbn55damqydNUYva0RqiUYrD9wMwT6ecxMprMW6GlpWTjgeiR2NCby" +
"3Xbt6nwbTAPx7BU78YidlhF01rwe7aa1UHZ45XDOOlMaJbnGVX+BvNVmSm9ibgAlVnd" +
"av0Iz85F+GbsoJzYUk/HtKpCAEVo+pwgvcyo5GoSJWtzZJ1WF2W6E30P0//ZlzW4K90" +
"1I354L27ar4y2t2YxcF5Mc+WFtkgfSEq7JhPJZx2UjR3epunLd3TXgI1AhqOzKVZYYP" +
"re8VaT29YaWxU3q6grm6iZKpar7W2bGUQjsTJ44oMlY5SzJrt1dtgWS2JxvAgMBAAEC" +
"ggEAX7YRpBp9HCVKj/n6/8t2kAensRzJ06a0QGiQyF1NHH/UHvAeJkWf7z/FpHydhso" +
"8cRW1KiQ0F0nlFw0CVsNFooWo0yo9AOOpnya9NDMR5yJvOMy+2agBRj9T/gEKZzvj4X" +
"xhXDeU+wC2Z0t2ZCx/BIiFJpE3uNuLY+iLNnM/zfurTNkiZjACHbudkvl6pPSO4vWEk" +
"gd56RBZwanOsXuuScxdLb/ojipQ/mvzNPnjEqvCXvfnRo4ADe1FeBZStN2+WCxou/nk" +
"VmNSqlPSOcYiOT6DaCzG014rmJHpWm1/LcHX4DLcDrnr6zJyFKKpt7QINxwDvamudPa" +
"z/hud6sfTkQKBgQDiVJANy4GbsfF5A+349e5a/BiSqN0S1OBFMB7okBsbvwMNVmhbcK" +
"djXp0hCJ+barvUncPHRGb89ZhzZuue0/bUhwu/UJWEh3gcuXVCwEVK+qbStFo3OfmMY" +
"ATrQudTfa28xCTmSbpdRsLtzZ3iCB2S43jIOpHM2EMH8ZeDWYIMgwKBgQDN2i8zDWok" +
"S7qQKlJmLpt+2frIzwWCaTlPiWq6xQa3NkpUGtWS3lQi/Li8BO4t3/Ee16uQ0EALDg3" +
"phdZJQ4cB+Jjx2ZPtR9qrY3LwcgoKTrgSl9cFV/DRwSHh0CeHgyOxXk4FJnkqhR2YdN" +
"57Ypa0YGZj1XNEnphCL60aj7GEpQKBgFDCbdiOSkQdHZXZ4htY3eFXXQlP+fqTPSdTA" +
"WRor1OaN+OVdo1SSFg71YOJCTKyxi0a0lYTQVB37hsXmXHGHqg9O+LbRU7R6/kL8ByO" +
"cOtNPyOmOR7FsBb32Cl+aP6wtMLLloMZwccwzbN/EBwsWykjw+BmjcnzTQ/TlAXJdY8" +
"zAoGBAKQ8r+vLiCPtR6w+F//ur6FFyRDuGzcxPMh4mu7ow7LpXeQ8hKnpOLexarKYPG" +
"/dfENfT0L65B3t2Ku4XH+XoN+xuFU9gwiNi6mybsHoOpp+s94hxyw8PaccsCu6J8+2k" +
"YOx+g2h5IpIKpS4qclHn3XKc+azJoRZBKHJ6BKJEtkBAoGALhI6Mzd3BGJ3YSVmSNKE" +
"JFo5q5nA9tSG4RsyWTthoRHwwTcb70IfliKgrpLjq5Dy4hoD1cnpnXBqHDlMqtGSa6l" +
"wPxozIWj0pTG/A1KHDj8j/4Z7c9x9VGVvmzY7Em+26qWZ9RJHdh2PP+pjwqDAK8ta0W" +
"ZuLOFW+UwL8uUr0XU=";
public static String encrypt(String source)
throws Exception {
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(Base64.decode(serverPublicKey.getBytes()));
PublicKey key = keyFactory.generatePublic(x509KeySpec);
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
return new String(Base64.encode(cipher.doFinal(source.getBytes())));
}
public static String decrypt(String cryptograph, String privateKey)
throws Exception {
RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA")
.generatePrivate(new PKCS8EncodedKeySpec(Base64.decode(privateKey)));
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, priKey);
return new String(cipher.doFinal(Base64.decode(cryptograph.getBytes())));
}
public static PublicKey getPublicKey(String key) throws Exception {
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(
Base64.decode(key.getBytes()));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(keySpec);
return publicKey;
}
public static PrivateKey getPrivateKey(String key) throws Exception {
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(
Base64.decode(key.getBytes()));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
return privateKey;
}
}
证书指纹获取
import android.content.Context
import android.content.pm.PackageManager
import android.content.pm.Signature
import java.security.MessageDigest
object SignatureHelper {
fun getSignatureStr(context: Context): String? {
val signature: Signature = getSignature(context) ?: return ""
val cert = signature.toByteArray()
return try {
val md5 = MessageDigest.getInstance("MD5")
val sha1 = MessageDigest.getInstance("SHA1")
val sha256 = MessageDigest.getInstance("SHA256")
val md5Key = md5.digest(cert)
val sha1Key = sha1.digest(cert)
val sha256Key = sha256.digest(cert)
String.format(
"MD5: %s\n\nSHA1: %s\n\nSHA-256: %s",
byteArrayToString(md5Key),
byteArrayToString(sha1Key),
byteArrayToString(sha256Key)
)
} catch (e: Exception) {
""
}
}
@Suppress("DEPRECATION")
private fun getSignature(argContext: Context): Signature? {
var signature: Signature? = null
try {
val packageName = argContext.packageName
val packageManager = argContext.packageManager
val packageInfo =
packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES)
val signatures = packageInfo.signatures
signature = signatures[0]
} catch (e: PackageManager.NameNotFoundException) {
e.printStackTrace()
}
return signature
}
private fun byteArrayToString(array: ByteArray): String {
var hexString = StringBuilder()
for(i in array.indices) {
val byte = array[i]
val hex = Integer.toHexString(0xFF and byte.toInt())
if (hex.length == 1) {
hexString.append('0')
}
hexString.append(hex)
if (i < array.size - 1) {
hexString.append(':')
}
}
return hexString.toString()
}
}