java加密工具类,可设置对应的加解密key

java加密工具类,可设置对应的加解密key

大家好,又见面了,我是你们的朋友全栈君。

public class AesEncryptUtil { //使用AES-128-CBC加密模式,key需要为16位,key和iv可以相同! private static String KEY ="whshenke20180606"; private static String IV ="whshenke20180606"; /** * 加密方法 * @param data 要加密的数据 * @param key 加密key * @param iv 加密iv * @return 加密的结果 * @throws Exception */ public static String encrypt(String data, String key, String iv) throws Exception { try { Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");//"算法/模式/补码方式" int blockSize = cipher.getBlockSize(); byte[] dataBytes = data.getBytes(); int plaintextLength = dataBytes.length; if (plaintextLength % blockSize != 0) { plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize)); } byte[] plaintext = new byte[plaintextLength]; System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length); SecretKeySpec keyspec = new SecretKeySpec(key.getBytes("UTF-8"), "AES"); IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes()); cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec); byte[] encrypted = cipher.doFinal(plaintext); return Base64Util.encode(encrypted); } catch (Exception e) { e.printStackTrace(); return null; } } /** * 解密方法 * @param data 要解密的数据 * @param key 解密key * @param iv 解密iv * @return 解密的结果 * @throws Exception whshenke20180606 */ public static String desEncrypt(String data, String key, String iv) { try { byte[] encrypted1 = Base64Util.decode(data); Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES"); IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes()); cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec); byte[] original = cipher.doFinal(encrypted1); String originalString = new String(original, "UTF-8"); return originalString; } catch (Exception e) { //e.printStackTrace(); return null; } } /** * 使用默认的key和iv加密 * @param data * @return * @throws Exception */ public static String encrypt(String data) throws Exception { return encrypt(data, KEY, IV); } /** * 使用默认的key和iv解密 * @param data * @return * @throws Exception */ public static String desEncrypt(String data){ return desEncrypt(data, KEY, IV); } /** * 测试 */ public static void main(String args[]) throws Exception { //KNnAbiCvFxispeG+wS01jA== //KNnAbiCvFxispeG+wS01jA== //KNnAbiCvFxispeG+wS01jA== String test = "测试"; String data = null; String key = "dufy20170329java"; String iv = "dufy20170329java"; // data = encrypt(test, key, iv); //KNnAbiCvFxispeG+wS01jA==  System.out.println(data); System.out.println(desEncrypt("8XguKV2aprVwg4UqEie7f9gkr7xDaSKrGZZD7x1J3uISWkvQAtpq8hpkskwi V+8bJmRcmQWIZ4sRom37GB7w7O4AH+HjH5ixViJ7k6bx+oEFVWSmIqKEj4e5 lMcyXgcXpTB8IGnt1WKS2p7Qnn+cjA==", key, iv)); } }

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/107460.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Android传感器开发与智能设备案例实战_Android移动应用开发

    Android传感器开发与智能设备案例实战_Android移动应用开发学习内容Ø传感器的基本概念ØAndroid中常见的传感器Ø如何在Android中开发传感器应用能力目标Ø了解传感器的基本概念Ø掌握Android中常见的传感器Ø掌握Android环境下如何使用SensorSimulator进行传感器开发Ø熟练掌握加速度传感器的开发步骤Ø熟练掌握方向传感器的开发步骤本章简介Android是一个面向应用程序开发的丰富平台,它除了拥有许多具有吸引力的用户

  • flex布局实现垂直居中

    flex布局实现垂直居中使用flex布局实现居中布局的步骤:父级元素使用flex布局父级元素使用align-items:center;代码示例:<!DOCTYPEhtml><htmllang=”en”><head><metacharset=”UTF-8″/><metahttp-equiv=”X-UA-Compatible”content=”IE=edge”/><metaname=”viewport”

  • 推荐5款好用的Java软件,初学者必看「建议收藏」

    推荐5款好用的Java软件,初学者必看「建议收藏」“工欲善其事必先利其器”,想要学好Java,除了要有好的学习资源之外,还要有一套适合自己的Java软件,好的软件能极大提高你的学习和工作效率。那么,学Java用什么软件好呢?下面小千为大家推荐5款好用的Java软件。

  • sql 语句查询 mysql 版本号「建议收藏」

    sql 语句查询 mysql 版本号「建议收藏」通过sql语句查询mysql版本号selectversion()fromdual;

  • 如何解决缺少msvcr110.dll?[通俗易懂]

    如何解决缺少msvcr110.dll?[通俗易懂]版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/qq_42680327小编也是在自己电脑出现问题的情况下,写的这篇博文,希望能够帮到大家。如果大家有什么问题,可以给我留言……dll的安全问题还是要提醒下,建议到知名网站下载,或使用正规修复工具进行修复1当计算机中缺少msvcr110.dll文件时,运行某些程序会报错。如图所示:…

    2022年10月29日
  • Java中如何输入一个字符

    Java中如何输入一个字符在一次编写代码时需要让程序接收一个字符,当我写出scanner.next时,我惊奇的发现,Scanner类中没有定义读取char的方法!!!Java中的扫描器类支持nextInt(),nextLong(),nextDouble()等。但是没有nextChar()。要读取char,我们使用next().charAt(0)。next()函数返回输入中的下一个标记/字符作为字符串,并且charAt(0)函数返回该字符串中的第一个字符。所以,我们有了思路:先创建一个Scanner对象,调用Scanner对象

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号