AES+BASE64双重加密,解密 私钥,向量解析

AES+BASE64双重加密,解密 私钥,向量解析使用AES加密,再使用base64编码加密。 * @param sSrc 加密的明文
* @param iv 向量 16 bytes

欢迎大家来到IT世界,在知识的湖畔探索吧!

使用AES加密,再使用base64编码加密。

具体细节请看注释。

/**
 * 加密
 *
 * @param sSrc 加密的明文
 * @param sKey 秘钥
 * @param iv 向量 16 bytes
 * @return
 * @throws Exception
 */
 public static String Encrypt(String sSrc, String sKey,String iv) throws Exception {
 if (sKey == null) {
 System.out.print("Key不能为空null");
 return null;
 }
 if (sKey.length() != 16) {
 System.out.print("Key的长度不是16位");
 return null;
 }
 if (iv.length() != 16) {
 System.out.print("iv的长度不是16位");
 return null;
 }
 byte[] raw = sKey.getBytes();
 SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
 Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
 IvParameterSpec iv1 = new IvParameterSpec(iv.getBytes());
 cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv1);
 byte[] encrypted = cipher.doFinal(sSrc.getBytes());
 return new BASE64Encoder().encode(encrypted);
 }

欢迎大家来到IT世界,在知识的湖畔探索吧!

解密,如加密相似,唯一不同就是解密的参数是待解密文件。

欢迎大家来到IT世界,在知识的湖畔探索吧!
/**
 * 解密
 * @param sSrc 接收到的加密过后的字符串(带解密密文)
 * @param sKey 秘钥
 * @return
 * @throws Exception
 */
 public static String Decrypt(String sSrc, String sKey,String iv) throws Exception {
 try {
 if (sKey == null) {
 System.out.print("Key不能为空null");
 return null;
 }
 if (sKey.length() != 16) {
 System.out.print("Key的长度不是16位");
 return null;
 }
 if (iv.length() != 16) {
 System.out.print("iv的长度不是16位");
 return null;
 }
 byte[] byte1 = Base64.decode(sSrc);//先用Base64解码
 IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes());
 SecretKeySpec key = new SecretKeySpec(sKey.getBytes(), "AES");
 Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
 cipher.init(Cipher.DECRYPT_MODE, key, ivSpec);
 //与加密时不同MODE:Cipher.DECRYPT_MODE
 byte[] ret = cipher.doFinal(byte1);
 return new String(ret, "utf-8");
 } catch (Exception ex) {
 System.out.println(ex.toString());
 return null;
 }
 }

上述是我集成的方法,把加密(解密)文件、私钥、向量都作为参数进行的解析。

如若您想单独加密解密的话,请继续往下看。

/** 
 * AES加密 
 * 
 * @param content 
 * @return 
 * @throws Exception 
 */ 
 public static byte[] aesEncryptToBytes(String content) throws Exception { 
 KeyGenerator kgen = KeyGenerator.getInstance("AES"); 
 kgen.init(LENGTH, new SecureRandom(defaultKey.getBytes())); 
 Cipher cipher = Cipher.getInstance("AES"); 
 SecretKeySpec sks = new SecretKeySpec(kgen.generateKey().getEncoded(), "AES"); 
 cipher.init(Cipher.ENCRYPT_MODE, sks); 
 return cipher.doFinal(content.getBytes(ENCODE)); 
 } 
/** 
 * AES解密 
 * 
 * @param encryptBytes 
 * @return 
 * @throws Exception 
 */ 
 public static String aesDecryptByBytes(byte[] encryptBytes) throws Exception { 
 KeyGenerator kgen = KeyGenerator.getInstance("AES"); 
 kgen.init(LENGTH, new SecureRandom(defaultKey.getBytes())); 
 Cipher cipher = Cipher.getInstance("AES"); 
 SecretKeySpec sks = new SecretKeySpec(kgen.generateKey().getEncoded(), "AES"); 
 cipher.init(Cipher.DECRYPT_MODE, sks); 
 byte[] decryptBytes = cipher.doFinal(encryptBytes); 
 return new String(decryptBytes); 
 } 
欢迎大家来到IT世界,在知识的湖畔探索吧!
/** 
 * BASE64 加密 
 * 
 * @param content 
 * @return 
 * @throws Exception 
 */ 
 public static String base64Encode(byte[] bytes) { 
 return new BASE64Encoder().encode(bytes); 
 }
/** 
 * BASE64 解密 
 * 
 * @param content 
 * @return 
 * @throws Exception 
 */ 
 public static byte[] base64Decode(String base64Code) throws Exception { 
 return isEmpty(base64Code) ? null : new BASE64Decoder().decodeBuffer(base64Code); 
 } 
 

接下来测试一下:

 public static void main(String[] args) throws Exception{
 String pwd="123456";
 String s = MD5Utils.md5LowerCase(pwd);
 //这里使用的是md5加密后的前十六位作为私钥,后十六位作为向量
 //私钥
 String substring = s.substring(0, 16);
 //向量
 String substring1 = s.substring(16, 32);
 System.out.println("私钥 :"+substring);
 System.out.println("向量 :"+substring1);
 String mobile="18621764382";
 String encrypt1 = Encrypt(mobile, substring,substring1);
 System.out.println("加密后的密文:"+encrypt1);
 String decrypt1 = Decrypt(encrypt1, substring,substring1);
 System.out.println("解密后的明文:"+decrypt1);
 }

结果:

私钥 :e10adc3949ba59ab
向量 :be56e057f20f883e
加密后的密文:c85VnIGqV2rxsPT1lNviiA==
解密后的明文:18621764382
AES+BASE64双重加密,解密 私钥,向量解析

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/49061.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信