Android 字符串的加密和解密

  • 代码
  • 转载

代码

java

package com.rdwl.rdfeibilib;import android.util.Base64;import java.nio.charset.StandardCharsets;import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.DESKeySpec;/** * 字符串加密工具 * * @author D10NG * @date on 2019-06-27 10:10 */public class EncryptUtils {    /** 加密key */    private static final String PASSWORD_ENC_SECRET = "test";    /**     * 加密     * @param clearText     * @return     */    public static String encryptPassword(String clearText) {        try {            DESKeySpec keySpec = new DESKeySpec(                    PASSWORD_ENC_SECRET.getBytes(StandardCharsets.UTF_8));            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");            SecretKey key = keyFactory.generateSecret(keySpec);            Cipher cipher = Cipher.getInstance("DES");            cipher.init(Cipher.ENCRYPT_MODE, key);            return Base64.encodeToString(cipher.doFinal(clearText                    .getBytes(StandardCharsets.UTF_8)), Base64.DEFAULT);        } catch (Exception e) {            e.printStackTrace();        }        return clearText;    }    /**     * 解密     * @param encryptedPwd     * @return     */    public static String decryptPassword(String encryptedPwd) {        try {            DESKeySpec keySpec = new DESKeySpec(                    PASSWORD_ENC_SECRET.getBytes(StandardCharsets.UTF_8));            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");            SecretKey key = keyFactory.generateSecret(keySpec);            byte[] encryptedWithoutB64 = Base64.decode(encryptedPwd, Base64.DEFAULT);            Cipher cipher = Cipher.getInstance("DES");            cipher.init(Cipher.DECRYPT_MODE, key);            byte[] plainTextPwdBytes = cipher.doFinal(encryptedWithoutB64);            return new String(plainTextPwdBytes);        } catch (Exception e) {            e.printStackTrace();        }        return encryptedPwd;    }}

kotlin

import android.util.Base64import java.nio.charset.Charsetimport javax.crypto.Cipherimport javax.crypto.spec.IvParameterSpecimport javax.crypto.spec.SecretKeySpec/** * 字符串加密工具 * * @author D10NG * @date on 2019-06-27 10:10 */object EncryptUtils {    /** 加密key  */    private var PASSWORD_ENC_SECRET = "test"    //private static final String CipherMode = "AES/ECB/PKCS5Padding";使用ECB加密,不需要设置IV,但是不安全    private const val CipherMode = "AES/CFB/NoPadding"//使用CFB加密,需要设置IV    /**     * 对字符串加密     * @param data  源字符串     * @return  加密后的字符串     */    fun encrypt(data: String): String {        checkKeyLength()        val cipher = Cipher.getInstance(CipherMode)        val keySpec = SecretKeySpec(PASSWORD_ENC_SECRET.toByteArray(), "AES")        cipher.init(            Cipher.ENCRYPT_MODE, keySpec, IvParameterSpec(                ByteArray(cipher.blockSize)            )        )        val encrypted = cipher.doFinal(data.toByteArray())        return Base64.encodeToString(encrypted, Base64.DEFAULT)    }    /**     * 对字符串解密     * @param data  已被加密的字符串     * @return  解密得到的字符串     */    fun decrypt(data: String): String {        checkKeyLength()        val encrypted1 = Base64.decode(data.toByteArray(), Base64.DEFAULT)        val cipher = Cipher.getInstance(CipherMode)        val keySpec = SecretKeySpec(PASSWORD_ENC_SECRET.toByteArray(), "AES")        cipher.init(            Cipher.DECRYPT_MODE, keySpec, IvParameterSpec(                ByteArray(cipher.blockSize)            )        )        val original = cipher.doFinal(encrypted1)        return String(original, Charset.forName("UTF-8"))    }    /**     * 检查设定的key值长度     */    private fun checkKeyLength() {        if (PASSWORD_ENC_SECRET.length < 32) {            val a = 32 - PASSWORD_ENC_SECRET.length            val builder = StringBuilder(PASSWORD_ENC_SECRET)            for (i in 0 until a) {                builder.append("A")            }            PASSWORD_ENC_SECRET = builder.toString()        }    }}

转载

@mythmayor :Android - 字符串的加密和解密
https://blog.csdn.net/mythmayor/article/details/75257981

更多相关文章

  1. Android上的磁盘加密(/data)
  2. 2010.11.28(2)———android 展示网页 和 调用js代码
  3. 2010.11.28(2)———android 展示网页 和 调用js代码
  4. Android(安卓)FDE 加密过程
  5. Java/android下哈希sha1和MD5的实现
  6. android edittext属性说明
  7. AndroidManifest.xml【 manifest -> permission-tree 和 manifes
  8. Android加密算法:AES、Base64加密算法
  9. Android(安卓)创建悬停通知栏

随机推荐

  1. [置顶] Android相关资源下载
  2. android Toast大全
  3. Android(安卓)绘制DisplayList
  4. Linux/Android——usb触摸屏驱动 - usbto
  5. android中fragment在后台回收时的生命周
  6. React Native学习第三天
  7. android常见错误之Nor…
  8. 秒懂依赖注入及 Dagger2 的实用技能(如何
  9. Android遍历数组、集合和Map
  10. Android(安卓)天气预报(使用okHttp、Async