代码:
import android.os.Build import androidx.annotation.RequiresApi import java.lang.Exception import java.security.Key import java.util.* import javax.crypto.Cipher import javax.crypto.SecretKeyFactory import javax.crypto.spec.DESKeySpec object DesCrypt { @RequiresApi(Build.VERSION_CODES.O) fun encrypt(password: String, input: String):String { val cipher = Cipher.getInstance("DES") val kf = SecretKeyFactory.getInstance("DES") val keySpec = DESKeySpec(password.toByteArray()) val key: Key = kf.generateSecret(keySpec) cipher.init(Cipher.ENCRYPT_MODE, key) //加密 val encrypt = cipher.doFinal(input.toByteArray()) return Base64.getEncoder().encodeToString(encrypt)//通过Base64解决乱码问题,否则会出现异常(avax.crypto.IllegalBlockSizeException: last block incomplete in decryption) } fun dencrypt(password: String, input: String):String { val cipher = Cipher.getInstance("DES") val kf = SecretKeyFactory.getInstance("DES") val keySpec = DESKeySpec(password.toByteArray()) val key: Key = kf.generateSecret(keySpec) cipher.init(Cipher.DECRYPT_MODE, key) //解密 var dencrypt:ByteArray try { dencrypt = cipher.doFinal(Base64.getDecoder().decode(input)) }catch (e: Exception){ println(e) return "" } return String(dencrypt) } }
fun des加解密() { val str = "有了具名参数,有默认值的参数就没必要放在右边了;swift的外部参数,同样解决了了这本问题" val encrypt = DesCrypt.encrypt(password = "qwerasdf", input = str) println("---加密后:${encrypt}") val dencrypt = DesCrypt.dencrypt("qwerasdf", encrypt) println("---解密后:${dencrypt}") }