Java与Winform进行AES加解密数据传输的工具类与对应关系和示例
创始人
2024-05-29 10:42:28
0

场景

Android+Java中使用Aes对称加密的工具类与使用:

Android+Java中使用Aes对称加密的工具类与使用_霸道流氓气质的博客-CSDN博客

上面讲的Java与安卓进行数据传输时使用AES加解密的示例工具类。

如果Java需要与其他第三方平台比如Winform程序进行数据传递时也需要

数据加解密。

AES

AES(高级加密标准:Advanced Encryption Standard)加密是一种对称的加密方式,用来替代原先的DES。

AES支持三种长度的密钥: 128位,192位,256位

平时大家所说的AES128,AES192,AES256,实际上就是指AES算法对不同长度密钥的使用。

三种密钥的区别:

从安全性来看,AES256安全性最高。从性能看,AES128性能最高。本质原因是它们的加密处理轮数不同。

本文采用AES的ECB模式进行加密,填充方式为PKCS5Padding,加密的密码必须为16位。编码方式统一使用UTF-8。

关于加密模式与填充模式不再详解,可自行学习,只需保证Java与Winform中对应即可。

Java AES加密中的ECB加密模式对应于C#中的System.Security.Cryptography.CipherMode.ECB模式;

Java中的PKCS5Padding填充方式,对应于C#中的System.Security.Cryptography.PaddingMode.PKCS7;

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi 

实现

1、Java中进行加解密的流程与上面博客中一致

引入依赖

        org.bouncycastlebcprov-jdk161.46

新建工具类

​
import org.apache.tomcat.util.codec.binary.Base64;
import org.bouncycastle.jce.provider.BouncyCastleProvider;import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.SecureRandom;
import java.util.Random;/*** AES加、解密算法工具类*/
public class AesUtils {/*** 加密算法AES*/private static final String KEY_ALGORITHM = "AES";/*** key的长度,Wrong key size: must be equal to 128, 192 or 256* 传入时需要16、24、36*/private static final Integer KEY_LENGTH = 16 * 8;/*** 算法名称/加密模式/数据填充方式* 默认:AES/ECB/PKCS5Padding*/private static final String ALGORITHMS = "AES/ECB/PKCS5Padding";/*** 后端AES的key,由静态代码块赋值*/public static String key = "badaodechengxvyu";static {key = getKey();}/*** 获取key*/public static String getKey() {StringBuilder uid = new StringBuilder();//产生16位的强随机数Random rd = new SecureRandom();for (int i = 0; i < KEY_LENGTH / 8; i++) {//产生0-2的3位随机数int type = rd.nextInt(3);switch (type) {case 0://0-9的随机数uid.append(rd.nextInt(10));break;case 1://ASCII在65-90之间为大写,获取大写随机uid.append((char) (rd.nextInt(25) + 65));break;case 2://ASCII在97-122之间为小写,获取小写随机uid.append((char) (rd.nextInt(25) + 97));break;default:break;}}return uid.toString();}/*** 加密** @param content    加密的字符串* @param encryptKey key值*/public static String encrypt(String content, String encryptKey) throws Exception {//设置Cipher对象Cipher cipher = Cipher.getInstance(ALGORITHMS,new BouncyCastleProvider());cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(encryptKey.getBytes(), KEY_ALGORITHM));//调用doFinalbyte[] b = cipher.doFinal(content.getBytes(StandardCharsets.UTF_8));// 转base64return Base64.encodeBase64String(b);}/*** 解密** @param encryptStr 解密的字符串* @param decryptKey 解密的key值*/public static String decrypt(String encryptStr, String decryptKey) throws Exception {//base64格式的key字符串转bytebyte[] decodeBase64 = Base64.decodeBase64(encryptStr);//设置Cipher对象Cipher cipher = Cipher.getInstance(ALGORITHMS,new BouncyCastleProvider());cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(decryptKey.getBytes(), KEY_ALGORITHM));//调用doFinal解密byte[] decryptBytes = cipher.doFinal(decodeBase64);return new String(decryptBytes);}
}​

加解密测试

    public static void main(String[] args) {/*        String sjkey = getKey();System.out.println("获得随机key:" + sjkey);*///16位String key = "badaodechengxvyu";//字符串String str = "霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主";try {//加密String encrypt = encrypt(str, key);//解密String decrypt = decrypt(encrypt, key);System.out.println("加密前:" + str);System.out.println("加密后:" + encrypt);System.out.println("解密后:" + decrypt);} catch (Exception e) {e.printStackTrace();}}

测试结果

 

2、Winform中也新建工具类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Security.Cryptography;namespace WinformStudyDemo.com.badao.utils
{class AESUtils{private static string key = "badaodechengxvyu";// AES 加密public static string encrypt(string str){if (string.IsNullOrEmpty(str)) return null;Byte[] toEncryptArray = Encoding.UTF8.GetBytes(str);RijndaelManaged rm = new RijndaelManaged{Key = Encoding.UTF8.GetBytes(key),Mode = CipherMode.ECB,Padding = PaddingMode.PKCS7};ICryptoTransform cTransform = rm.CreateEncryptor();Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);return Convert.ToBase64String(resultArray, 0, resultArray.Length);}// AES 解密public static string decrypt(string str){if (string.IsNullOrEmpty(str)) return null;Byte[] toEncryptArray = Convert.FromBase64String(str);RijndaelManaged rm = new RijndaelManaged{Key = Encoding.UTF8.GetBytes(key),Mode = CipherMode.ECB,Padding = PaddingMode.PKCS7};ICryptoTransform cTransform = rm.CreateDecryptor();Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);return Encoding.UTF8.GetString(resultArray);}}
}

注意与上面Java一致的key

然后进行加解密测试

            //字符串String str = "https://blog.csdn.net/BADAO_LIUMANG_QIZHI";try{//加密String encrypt = com.badao.utils.AESUtils.encrypt(str);//解密String decrypt = com.badao.utils.AESUtils.decrypt(encrypt);Console.WriteLine("加密前:" + str);Console.WriteLine("加密后:" + encrypt);Console.WriteLine("解密后:" + decrypt);}catch (Exception exeception){Console.WriteLine(exeception.Message);}

测试结果

 

3、经过对比结果一致

均为

加密前:https://blog.csdn.net/BADAO_LIUMANG_QIZHI
加密后:hI/PIG/+rNC9OOqeqSILf4txnymyEAWa5FUVtBMYvNDlkpxgShSB44FKbh1HkvVg
解密后:https://blog.csdn.net/BADAO_LIUMANG_QIZHI

相关内容

热门资讯

海南临高县遇强风仓库被掀顶 转自:新京报我们视频 【#海南临高县遇强风仓库被掀顶#】...
在网红打卡点挖萤石,杭州9岁男... 本文来自微信公众号“大象新闻”5月10日下午1点30分左右,杭州消防接到报警:余杭四岭村千岱坑萤石矿...
新疆首个!获批! 近日,2025年塔城市玉米“银期保”种收专项项目获得大连商品交易所(以下简称“大商所”)立项批准。这...
虹软科技控股股东拟拟询价转让2... 北京商报讯(记者马换换王蔓蕾)5月10日,虹软科技(688088)披露公告称,公司控股股东HomeR...
云南省青少年科技创新大赛“科普...   5月9日至11日,第39届云南省青少年科技创新大赛在楚雄彝族自治州举行。作为本届大赛活动之一的“...
2025汶川半程马拉松赛鸣枪开... 5月11日,“生命礼赞·为爱奔跑”2025汶川半程马拉松赛在四川阿坝州汶川县映秀镇鸣枪开跑。本次赛事...
刘强东,又有大动作?   近日,天眼查显示,京东集团旗下子公司北京京东叁佰陆拾度电子商务有限公司,申请注册多枚“Joyro...
iPhone 16 Pro系列... 来源:环球网【环球网科技综合报道】5月11日消息,京东近日宣布了一项针对iPhone 16 Pro系...
北京房山:德润“心”房 | 用... 她创新商业模式,架起城乡联动的桥梁;她深耕蛋白桑产业,让一片片桑叶变成农民致富的“金叶子”;她凝聚志...
酉立智能北交所IPO5月16日... 转自:北京商报北京商报讯(记者 马换换 王蔓蕾)根据安排,江苏酉立智能装备股份有限公司(以下简称“酉...
@2025三门峡考生 志愿填报... 转自:三门峡发布河南省将于5月11日9时至12日17时进行2025年普通高校招生网上填报志愿模拟演练...
首映丨纪录电影《滚烫年华》:献... 电影海报“这座城市的光鲜背后,是无数普通人用双手托起的日常。”纪录电影《滚烫年华》5月10日正式公映...
北京东城:胡同深处的花事秘境,... 转自:北京日报客户端五月,初夏,东城的胡同迎来了一年中最浪漫的时节。“五月顶流”蔷薇攀墙怒放,粉白相...
链群协同超有料①丨一根小导线如... 转自:河北新闻网 “这根导线的截面积只有0.13平方毫米...
减肥人群的十二时辰 作者:谭晋豫 袁牟知博来源:中新社微信公众号
慧辰股份虚假陈述案一审落槌,普... 来源:环球网 【环球网财经综合报道】近日,上市公司慧辰股份(维权)中小投资者诉讼案迎来新进展。因IP...
日本一孤独死老人被发现时已白骨... #日本去年孤独死人数超2万#【#日本一孤独死老人被发现时已白骨化#】独居者孤独死亡的现象在日本持续蔓...
最新研究:学龄前儿童肥胖风险存... 来源:@究竟视频微博 【最新研究:#学龄前儿童肥胖风险存在居住地差异##学龄前女童肥胖风险高于...
让苗绣“活”在当代,东莞教师助...        5月9日,人民网以《贵州松桃:惠风拂杏坛 繁星映初心》为题报道了东莞市纺织服装学校教师...
经济随笔丨“十五五”将是一个怎... 擘画“十五五”蓝图的脚步,正在加紧。4月30日,习近平总书记在上海主持召开部分省区市“十五五”时期经...