【转】Android(安卓)字符串的加密和解密
16lz
2021-12-04
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
更多相关文章
- Android上的磁盘加密(/data)
- 2010.11.28(2)———android 展示网页 和 调用js代码
- 2010.11.28(2)———android 展示网页 和 调用js代码
- Android(安卓)FDE 加密过程
- Java/android下哈希sha1和MD5的实现
- android edittext属性说明
- AndroidManifest.xml【 manifest -> permission-tree 和 manifes
- Android加密算法:AES、Base64加密算法
- Android(安卓)创建悬停通知栏