密钥

【AES】

一种对称加密算法,DES的取代者。

加密相关文章见:Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA

 

【代码】

代码比较多,有一部分非本文章内容代码,具体自己看吧。

 

[java] view plaincopy
print?在CODE上查看代码片派生到我的代码片
  1. package com.uikoo9.util.encrypt;  
  2.   
  3. import java.math.BigInteger;  
  4. import java.security.MessageDigest;  
  5. import java.security.SecureRandom;  
  6.   
  7. import javax.crypto.Cipher;  
  8. import javax.crypto.KeyGenerator;  
  9. import javax.crypto.spec.SecretKeySpec;  
  10.   
  11. import sun.misc.BASE64Decoder;  
  12. import sun.misc.BASE64Encoder;  
  13.   
  14. import com.uikoo9.util.QStringUtil;  
  15.   
  16. /** 
  17.  * 编码工具类 
  18.  * 1.将byte[]转为各种进制的字符串 
  19.  * 2.base 64 encode 
  20.  * 3.base 64 decode 
  21.  * 4.获取byte[]的md5值 
  22.  * 5.获取字符串md5值 
  23.  * 6.结合base64实现md5加密 
  24.  * 7.AES加密 
  25.  * 8.AES加密为base 64 code 
  26.  * 9.AES解密 
  27.  * 10.将base 64 code AES解密 
  28.  * @author uikoo9 
  29.  * @version 0.0.7.20140601 
  30.  */  
  31. public class QEncodeUtil {  
  32.       
  33.     public static void main(String[] args) throws Exception {  
  34.         String content = "我爱你";  
  35.         System.out.println("加密前:" + content);  
  36.   
  37.         String key = "123456";  
  38.         System.out.println("加密密钥和解密密钥:" + key);  
  39.           
  40.         String encrypt = aesEncrypt(content, key);  
  41.         System.out.println("加密后:" + encrypt);  
  42.           
  43.         String decrypt = aesDecrypt(encrypt, key);  
  44.         System.out.println("解密后:" + decrypt);  
  45.     }  
  46.       
  47.     /** 
  48.      * 将byte[]转为各种进制的字符串 
  49.      * @param bytes byte[] 
  50.      * @param radix 可以转换进制的范围,从Character.MIN_RADIX到Character.MAX_RADIX,超出范围后变为10进制 
  51.      * @return 转换后的字符串 
  52.      */  
  53.     public static String binary(byte[] bytes, int radix){  
  54.         return new BigInteger(1, bytes).toString(radix);// 这里的1代表正数  
  55.     }  
  56.       
  57.     /** 
  58.      * base 64 encode 
  59.      * @param bytes 待编码的byte[] 
  60.      * @return 编码后的base 64 code 
  61.      */  
  62.     public static String base64Encode(byte[] bytes){  
  63.         return new BASE64Encoder().encode(bytes);  
  64.     }  
  65.       
  66.     /** 
  67.      * base 64 decode 
  68.      * @param base64Code 待解码的base 64 code 
  69.      * @return 解码后的byte[] 
  70.      * @throws Exception 
  71.      */  
  72.     public static byte[] base64Decode(String base64Code) throws Exception{  
  73.         return QStringUtil.isEmpty(base64Code) ? null : new BASE64Decoder().decodeBuffer(base64Code);  
  74.     }  
  75.       
  76.     /** 
  77.      * 获取byte[]的md5值 
  78.      * @param bytes byte[] 
  79.      * @return md5 
  80.      * @throws Exception 
  81.      */  
  82.     public static byte[] md5(byte[] bytes) throws Exception {  
  83.         MessageDigest md = MessageDigest.getInstance("MD5");  
  84.         md.update(bytes);  
  85.           
  86.         return md.digest();  
  87.     }  
  88.       
  89.     /** 
  90.      * 获取字符串md5值 
  91.      * @param msg  
  92.      * @return md5 
  93.      * @throws Exception 
  94.      */  
  95.     public static byte[] md5(String msg) throws Exception {  
  96.         return QStringUtil.isEmpty(msg) ? null : md5(msg.getBytes());  
  97.     }  
  98.       
  99.     /** 
  100.      * 结合base64实现md5加密 
  101.      * @param msg 待加密字符串 
  102.      * @return 获取md5后转为base64 
  103.      * @throws Exception 
  104.      */  
  105.     public static String md5Encrypt(String msg) throws Exception{  
  106.         return QStringUtil.isEmpty(msg) ? null : base64Encode(md5(msg));  
  107.     }  
  108.       
  109.     /** 
  110.      * AES加密 
  111.      * @param content 待加密的内容 
  112.      * @param encryptKey 加密密钥 
  113.      * @return 加密后的byte[] 
  114.      * @throws Exception 
  115.      */  
  116.     public static byte[] aesEncryptToBytes(String content, String encryptKey) throws Exception {  
  117.         KeyGenerator kgen = KeyGenerator.getInstance("AES");  
  118.         kgen.init(128, new SecureRandom(encryptKey.getBytes()));  
  119.   
  120.         Cipher cipher = Cipher.getInstance("AES");  
  121.         cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(kgen.generateKey().getEncoded(), "AES"));  
  122.           
  123.         return cipher.doFinal(content.getBytes("utf-8"));  
  124.     }  
  125.       
  126.     /** 
  127.      * AES加密为base 64 code 
  128.      * @param content 待加密的内容 
  129.      * @param encryptKey 加密密钥 
  130.      * @return 加密后的base 64 code 
  131.      * @throws Exception 
  132.      */  
  133.     public static String aesEncrypt(String content, String encryptKey) throws Exception {  
  134.         return base64Encode(aesEncryptToBytes(content, encryptKey));  
  135.     }  
  136.       
  137.     /** 
  138.      * AES解密 
  139.      * @param encryptBytes 待解密的byte[] 
  140.      * @param decryptKey 解密密钥 
  141.      * @return 解密后的String 
  142.      * @throws Exception 
  143.      */  
  144.     public static String aesDecryptByBytes(byte[] encryptBytes, String decryptKey) throws Exception {  
  145.         KeyGenerator kgen = KeyGenerator.getInstance("AES");  
  146.         kgen.init(128, new SecureRandom(decryptKey.getBytes()));  
  147.           
  148.         Cipher cipher = Cipher.getInstance("AES");  
  149.         cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(kgen.generateKey().getEncoded(), "AES"));  
  150.         byte[] decryptBytes = cipher.doFinal(encryptBytes);  
  151.           
  152.         return new String(decryptBytes);  
  153.     }  
  154.       
  155.     /** 
  156.      * 将base 64 code AES解密 
  157.      * @param encryptStr 待解密的base 64 code 
  158.      * @param decryptKey 解密密钥 
  159.      * @return 解密后的string 
  160.      * @throws Exception 
  161.      */  
  162.     public static String aesDecrypt(String encryptStr, String decryptKey) throws Exception {  
  163.         return QStringUtil.isEmpty(encryptStr) ? null : aesDecryptByBytes(base64Decode(encryptStr), decryptKey);  
  164.     }  
  165.       
  166. }  
package com.uikoo9.util.encrypt;import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.SecureRandom;import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.spec.SecretKeySpec;import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;import com.uikoo9.util.QStringUtil;/*** 编码工具类* 1.将byte[]转为各种进制的字符串* 2.base 64 encode* 3.base 64 decode* 4.获取byte[]的md5值* 5.获取字符串md5值* 6.结合base64实现md5加密* 7.AES加密* 8.AES加密为base 64 code* 9.AES解密* 10.将base 64 code AES解密* @author uikoo9* @version 0.0.7.20140601*/
public class QEncodeUtil {public static void main(String[] args) throws Exception {String content = "我爱你";System.out.println("加密前:" + content);String key = "123456";System.out.println("加密密钥和解密密钥:" + key);String encrypt = aesEncrypt(content, key);System.out.println("加密后:" + encrypt);String decrypt = aesDecrypt(encrypt, key);System.out.println("解密后:" + decrypt);}/*** 将byte[]转为各种进制的字符串* @param bytes byte[]* @param radix 可以转换进制的范围,从Character.MIN_RADIX到Character.MAX_RADIX,超出范围后变为10进制* @return 转换后的字符串*/public static String binary(byte[] bytes, int radix){return new BigInteger(1, bytes).toString(radix);// 这里的1代表正数}/*** base 64 encode* @param bytes 待编码的byte[]* @return 编码后的base 64 code*/public static String base64Encode(byte[] bytes){return new BASE64Encoder().encode(bytes);}/*** base 64 decode* @param base64Code 待解码的base 64 code* @return 解码后的byte[]* @throws Exception*/public static byte[] base64Decode(String base64Code) throws Exception{return QStringUtil.isEmpty(base64Code) ? null : new BASE64Decoder().decodeBuffer(base64Code);}/*** 获取byte[]的md5值* @param bytes byte[]* @return md5* @throws Exception*/public static byte[] md5(byte[] bytes) throws Exception {MessageDigest md = MessageDigest.getInstance("MD5");md.update(bytes);return md.digest();}/*** 获取字符串md5值* @param msg * @return md5* @throws Exception*/public static byte[] md5(String msg) throws Exception {return QStringUtil.isEmpty(msg) ? null : md5(msg.getBytes());}/*** 结合base64实现md5加密* @param msg 待加密字符串* @return 获取md5后转为base64* @throws Exception*/public static String md5Encrypt(String msg) throws Exception{return QStringUtil.isEmpty(msg) ? null : base64Encode(md5(msg));}/*** AES加密* @param content 待加密的内容* @param encryptKey 加密密钥* @return 加密后的byte[]* @throws Exception*/public static byte[] aesEncryptToBytes(String content, String encryptKey) throws Exception {KeyGenerator kgen = KeyGenerator.getInstance("AES");kgen.init(128, new SecureRandom(encryptKey.getBytes()));Cipher cipher = Cipher.getInstance("AES");cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(kgen.generateKey().getEncoded(), "AES"));return cipher.doFinal(content.getBytes("utf-8"));}/*** AES加密为base 64 code* @param content 待加密的内容* @param encryptKey 加密密钥* @return 加密后的base 64 code* @throws Exception*/public static String aesEncrypt(String content, String encryptKey) throws Exception {return base64Encode(aesEncryptToBytes(content, encryptKey));}/*** AES解密* @param encryptBytes 待解密的byte[]* @param decryptKey 解密密钥* @return 解密后的String* @throws Exception*/public static String aesDecryptByBytes(byte[] encryptBytes, String decryptKey) throws Exception {KeyGenerator kgen = KeyGenerator.getInstance("AES");kgen.init(128, new SecureRandom(decryptKey.getBytes()));Cipher cipher = Cipher.getInstance("AES");cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(kgen.generateKey().getEncoded(), "AES"));byte[] decryptBytes = cipher.doFinal(encryptBytes);return new String(decryptBytes);}/*** 将base 64 code AES解密* @param encryptStr 待解密的base 64 code* @param decryptKey 解密密钥* @return 解密后的string* @throws Exception*/public static String aesDecrypt(String encryptStr, String decryptKey) throws Exception {return QStringUtil.isEmpty(encryptStr) ? null : aesDecryptByBytes(base64Decode(encryptStr), decryptKey);}}


【输出】

 

 

[java] view plaincopy
print?在CODE上查看代码片派生到我的代码片
    1. 加密前:我爱你  
    2. 加密密钥和解密密钥:123456  
    3. 加密后:A63fa7DjAe3yYji44BTm1g==  
    4. 解密后:我爱你  


      由于文章年数就远,声明此文章转载并非本人所写,在此向作者致谢

转载于:https://www.cnblogs.com/honey01/p/6281610.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/417413.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql复制安全性_从MySQL复制功能中得到一举三得实惠

在MySQL数据库中,支持单项、异步复制。在复制过程中,一个服务器充当主服务器,而另外一台服务器充当从服务器。如下图所示。此时主服务器会将更新信息写入到一个特定的二进制文件中。并会维护文件的一个索引用来跟踪日志循环。这个日志可以记录…

WhqDatabase 我自己用C#开发的列式数据库

项目地址:https://github.com/wanghongqi/WhqDatabase WhqDatabase 作者:王洪岐 本项目为一个C#实现的列式数据库,欢迎大家提出指正意见。项目中包含对Kernel完整的测试。 项目列表:Kernel 内核Test 对内核的测试Service 可视的…

自定义安装mysql linux_linux下 安装mysql 问题

展开全部因为32313133353236313431303231363533e4b893e5b19e31333365633934mysql程序在启动的时候 非常依赖my.cnf里面的配置,而my.cnf文件中的配置,在执行mysql初始化的时候就可以手动指定。如果mysql不是使用yum安装,而是将mysql安装到自定…

js中斜杠转义

js中“/”不需要转义。 if(myPath.indexOf("/Upload/EmailFile/")!-1){ alert("有附件!")}转载于:https://www.cnblogs.com/Tpf386/p/6282773.html

SVN强制解锁操作

如果是其他人锁定文件,而你期望对此文件操作,可进行偷锁操作。 1,将被锁定文件SVN Check out…到本机硬盘。 2,点击文件右键,选择get lock, 3,勾上steal the locks 4,之后再进行Release Lock操作…

前端学习(2244):计算器显示问题

<!DOCTYPE html> <html><head><meta charset"utf-8" /><title>奥里给&#xff01;</title><style type"text/css">.a {height: 100px;width: 450px;border: 3px solid black;background-color: beige;font-size…

MySQL索引原理及慢查询优化

MySQL凭借着出色的性能、低廉的成本、丰富的资源&#xff0c;已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色&#xff0c;但所谓“好马配好鞍”&#xff0c;如何能够更好的使用它&#xff0c;已经成为开发工程师的必修课&#xff0c;我们经常会从职位描述上看到诸…

C语言沉浸式刷题【C语言必刷题】

1.猜凶手 某地发生了一起谋杀案&#xff0c;警察通过排查确定杀人凶手必为四个嫌疑犯的一个&#xff0c;以下是4个嫌犯的供词。已知&#xff08;请编写代码找出凶手&#xff09; A说&#xff1a;不是我。 B说&#xff1a;是C。C说&#xff1a;是D。D说&#xff1a;C再胡说。 程…

C#操作IIS6创建网站应用程序无效

创建网站root目录时执行AppCreate即可DirectoryEntry vdEntry newSiteEntry.Children.Add("root", "IIsWebVirtualDir");vdEntry.Invoke("AppCreate", true);vdEntry.CommitChanges();

python 代码排布_python实现经典排序算法的示例代码

以下排序算法最终结果都默认为升序排列&#xff0c;实现简单&#xff0c;没有考虑特殊情况&#xff0c;实现仅表达了算法的基本思想。冒泡排序内层循环中相邻的元素被依次比较&#xff0c;内层循环第一次结束后会将最大的元素移到序列最右边&#xff0c;第二次结束后会将次大的…

如何减小内存碎片

内存碎片 &#xff1a; 内部碎片&#xff08;占了不用&#xff09; 内部碎片就是已经被分配出去&#xff08;能明确指出属于哪个进程&#xff09;却不能被利用的内存空间&#xff1b;内部碎片是处于区域内部或页面内部的存储块。占有这些区域或页面的进程并不使用这个存储块。而…

python 英语翻译 excel_python批量将excel内容进行翻译写入功能

由于小编初来乍到&#xff0c;有很多地方不是很到位&#xff0c;还请见谅&#xff0c;但是很实用的哦&#xff01;1.首先是需要进行文件的读写操作&#xff0c;需要获取文件路径&#xff0c;方式使用os.listdir(路径)进行批量查找文件。file_path ‘/home/xx/xx/xx# ret 返回一…

bison实例

逆波兰记号计算器【文件名rpcalc.y】%{ #define YYSTYPE double #include <stdio.h> #include <math.h> #include <ctype.h> int yylex (void); void yyerror (char const *); %}%token NUM%% input: /* empty */| input line;line: \n| exp \n …

InstallShield LaunchAppAndWait运行另一个程序并等待该程序终止。

LaunchAppAndWait语法&#xff1a;LaunchAppAndWait (szProgram, szCmdLine, lWait);说明&#xff1a;LaunchAppAndWait函数运行由szProgram指定的带有szCmdLine指定的命令行参数的应用程序。第三个参数&#xff0c;lWait指示安装在继续前是否要等待直到运行的应用程序终止。 …

python3 while循环语句_python While 循环语句

python While 循环语句发布时间&#xff1a;2018-02-12 16:46:28编辑&#xff1a;admin阅读(2055)python 编程中 while 语句用于循环执行程序&#xff0c;即在某条件下&#xff0c;循环执行某段程序&#xff0c;以处理需要重复处理的相同任务。其基本形式为&#xff1a;while 判…

笔记:Zygote和SystemServer进程启动过程

简述 Android设备启动过程中&#xff0c;先是Linux内核加载完&#xff0c;接着Android中的第一个进程init启动&#xff0c;它会启动一些需要开机启动的进程。 Zygote就是进程init启动起来的。Android中所有应用程序进程&#xff0c;以及运行系统关键服务的System进程都是由Zygo…