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资料(书籍+代码)分享
  2. android计时demo源代码
  3. Android写文件到SDCard的一般过程和代码
  4. android 代码混淆问题解决
  5. Android 小代码集
  6. Android应用程序启动过程源代码分析(4)
  7. Android应用程序启动过程源代码分析(3)
  8. Android应用程序启动过程源代码分析(2)
  9. android 不使用布局文件,完全由代码控制布局实例

随机推荐

  1. Android浏览器显示大分辨率图片的问题
  2. 阿里云OS和Android的"基友“关系
  3. android中控制EditText不可编辑的问题
  4. Android群英传笔记——第九章:Android系统
  5. 编译Android内核 For nexus 5 以及绕过An
  6. android select选择器 checkbox改外观,but
  7. unity与android的无缝连接
  8. Android系列教程(3):Android(安卓)SDK中常用
  9. android Instrumentation
  10. Google Android真实的谎言