使用AES进行Android加密/解密

使用AES进行Android加密/解密

在Android上如何使用AES 加密和解密图像和其他文件有一个很好的例子吗?



幕布斯6054654
浏览 1622回答 3
3回答

慕哥6287543

import&nbsp;java.security.AlgorithmParameters;import&nbsp;java.security.SecureRandom;import&nbsp;java.security.spec.KeySpec;import&nbsp;javax.crypto.Cipher;import&nbsp;javax.crypto.KeyGenerator;import&nbsp;javax.crypto.SecretKey;import&nbsp;javax.crypto.SecretKeyFactory;import&nbsp;javax.crypto.spec.IvParameterSpec;import&nbsp;javax.crypto.spec.PBEKeySpec;import&nbsp;javax.crypto.spec.SecretKeySpec;class&nbsp;SecurityUtils&nbsp;{ &nbsp;&nbsp;private&nbsp;static&nbsp;final&nbsp;byte[]&nbsp;salt&nbsp;=&nbsp;{&nbsp;(byte)&nbsp;0xA4,&nbsp;(byte)&nbsp;0x0B,&nbsp;(byte)&nbsp;0xC8, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(byte)&nbsp;0x34,&nbsp;(byte)&nbsp;0xD6,&nbsp;(byte)&nbsp;0x95,&nbsp;(byte)&nbsp;0xF3,&nbsp;(byte)&nbsp;0x13&nbsp;}; &nbsp;&nbsp;private&nbsp;static&nbsp;int&nbsp;BLOCKS&nbsp;=&nbsp;128; &nbsp;&nbsp;public&nbsp;static&nbsp;byte[]&nbsp;encryptAES(String&nbsp;seed,&nbsp;String&nbsp;cleartext) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;Exception&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;rawKey&nbsp;=&nbsp;getRawKey(seed.getBytes("UTF8")); &nbsp;&nbsp;&nbsp;&nbsp;SecretKeySpec&nbsp;skeySpec&nbsp;=&nbsp;new&nbsp;SecretKeySpec(rawKey,&nbsp;"AES"); &nbsp;&nbsp;&nbsp;&nbsp;Cipher&nbsp;cipher&nbsp;=&nbsp;Cipher.getInstance("AES"); &nbsp;&nbsp;&nbsp;&nbsp;cipher.init(Cipher.ENCRYPT_MODE,&nbsp;skeySpec); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;cipher.doFinal(cleartext.getBytes("UTF8")); &nbsp;&nbsp;} &nbsp;&nbsp;public&nbsp;static&nbsp;byte[]&nbsp;decryptAES(String&nbsp;seed,&nbsp;byte[]&nbsp;data)&nbsp;throws&nbsp;Exception&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;rawKey&nbsp;=&nbsp;getRawKey(seed.getBytes("UTF8")); &nbsp;&nbsp;&nbsp;&nbsp;SecretKeySpec&nbsp;skeySpec&nbsp;=&nbsp;new&nbsp;SecretKeySpec(rawKey,&nbsp;"AES"); &nbsp;&nbsp;&nbsp;&nbsp;Cipher&nbsp;cipher&nbsp;=&nbsp;Cipher.getInstance("AES"); &nbsp;&nbsp;&nbsp;&nbsp;cipher.init(Cipher.DECRYPT_MODE,&nbsp;skeySpec); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;cipher.doFinal(data); &nbsp;&nbsp;} &nbsp;&nbsp;private&nbsp;static&nbsp;byte[]&nbsp;getRawKey(byte[]&nbsp;seed)&nbsp;throws&nbsp;Exception&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;KeyGenerator&nbsp;kgen&nbsp;=&nbsp;KeyGenerator.getInstance("AES"); &nbsp;&nbsp;&nbsp;&nbsp;SecureRandom&nbsp;sr&nbsp;=&nbsp;SecureRandom.getInstance("SHA1PRNG"); &nbsp;&nbsp;&nbsp;&nbsp;sr.setSeed(seed); &nbsp;&nbsp;&nbsp;&nbsp;kgen.init(BLOCKS,&nbsp;sr);&nbsp;//&nbsp;192&nbsp;and&nbsp;256&nbsp;bits&nbsp;may&nbsp;not&nbsp;be&nbsp;available &nbsp;&nbsp;&nbsp;&nbsp;SecretKey&nbsp;skey&nbsp;=&nbsp;kgen.generateKey(); &nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;raw&nbsp;=&nbsp;skey.getEncoded(); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;raw; &nbsp;&nbsp;} &nbsp;&nbsp;private&nbsp;static&nbsp;byte[]&nbsp;pad(byte[]&nbsp;seed)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;nseed&nbsp;=&nbsp;new&nbsp;byte[BLOCKS&nbsp;/&nbsp;8]; &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;BLOCKS&nbsp;/&nbsp;8;&nbsp;i++) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nseed[i]&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;seed.length;&nbsp;i++) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nseed[i]&nbsp;=&nbsp;seed[i]; &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;nseed; &nbsp;&nbsp;} &nbsp;&nbsp;public&nbsp;static&nbsp;byte[]&nbsp;encryptPBE(String&nbsp;password,&nbsp;String&nbsp;cleartext) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;Exception&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;SecretKeyFactory&nbsp;factory&nbsp;=&nbsp;SecretKeyFactory &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getInstance("PBKDF2WithHmacSHA1"); &nbsp;&nbsp;&nbsp;&nbsp;KeySpec&nbsp;spec&nbsp;=&nbsp;new&nbsp;PBEKeySpec(password.toCharArray(),&nbsp;salt,&nbsp;1024,&nbsp;256); &nbsp;&nbsp;&nbsp;&nbsp;SecretKey&nbsp;tmp&nbsp;=&nbsp;factory.generateSecret(spec); &nbsp;&nbsp;&nbsp;&nbsp;SecretKey&nbsp;secret&nbsp;=&nbsp;new&nbsp;SecretKeySpec(tmp.getEncoded(),&nbsp;"AES"); &nbsp;&nbsp;&nbsp;&nbsp;Cipher&nbsp;cipher&nbsp;=&nbsp;Cipher.getInstance("AES/CBC/PKCS5Padding"); &nbsp;&nbsp;&nbsp;&nbsp;cipher.init(Cipher.ENCRYPT_MODE,&nbsp;secret); &nbsp;&nbsp;&nbsp;&nbsp;AlgorithmParameters&nbsp;params&nbsp;=&nbsp;cipher.getParameters(); &nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;iv&nbsp;=&nbsp;params.getParameterSpec(IvParameterSpec.class).getIV(); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;cipher.doFinal(cleartext.getBytes("UTF-8")); &nbsp;&nbsp;} &nbsp;&nbsp;public&nbsp;static&nbsp;String&nbsp;decryptPBE(SecretKey&nbsp;secret,&nbsp;String&nbsp;ciphertext, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;iv)&nbsp;throws&nbsp;Exception&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;Cipher&nbsp;cipher&nbsp;=&nbsp;Cipher.getInstance("AES/CBC/PKCS5Padding"); &nbsp;&nbsp;&nbsp;&nbsp;cipher.init(Cipher.DECRYPT_MODE,&nbsp;secret,&nbsp;new&nbsp;IvParameterSpec(iv)); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;String(cipher.doFinal(ciphertext.getBytes()),&nbsp;"UTF-8"); &nbsp;&nbsp;}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java
Android