TripleDES CBC PKCS7PADDING 加密方式
此次使用的是CBC工作模式 - PKCS7PADDING填充格式
JAVA原始解密只有PKCS5PADDDING 需要引入第三方包
一下是GRADLE项目中的例子
首先引入第三包 刷新一下GRADLE依赖
implementation('org.bouncycastle:bcprov-ext-jdk15on:1.64')
import java.security.Key; import java.security.MessageDigest; import java.util.Map; import javax.crypto.Cipher; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESedeKeySpec; import javax.crypto.spec.IvParameterSpec; import org.apache.commons.codec.binary.Hex; import org.springframework.util.Base64Utils;
//原始文本 String plainText = "山本你说句话,加密到底行不行"; //密钥 String secretKey = "ehahahTomCat#7=*"; //向量 String iv = "TomTaw#7"; //字符集 String encoding = "UTF-8"; //注册一下上面引入的第三方解密方式 下面就可以无缝使用了 Security.addProvider(new BouncyCastleProvider()); try{ Key deskey = null; //16位密钥转24位密钥 byte[] keyBytes = secretKey.getBytes(); if (keyBytes.length == 16) { byte[] tmpKey = new byte[24]; System.arraycopy(keyBytes, 0, tmpKey, 0, 16); System.arraycopy(keyBytes, 0, tmpKey, 16, 8); keyBytes = tmpKey; } DESedeKeySpec spec = new DESedeKeySpec(keyBytes); SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede"); deskey = keyfactory.generateSecret(spec); Cipher cipher = Cipher.getInstance("desede/CBC/PKCS7Padding"); IvParameterSpec ips = new IvParameterSpec(iv.getBytes()); cipher.init(Cipher.ENCRYPT_MODE, deskey, ips); byte[] encryptData = cipher.doFinal(plainText.getBytes(encoding)); byte[] bb = Base64Utils.encode(encryptData); String result = new String(bb,"UTF-8"); System.out.println(result); return result; }catch(Exception e){ e.printStackTrace(); }
这段代码是把传入的原始文本 用TripleDES加密再Base64编码,要原始数值提前return就完事了
我程序跑是正常的 但是和需求上给的例子的加密结果不一样,也不知道哪里有问题 真的J8
先吧解决方案挂上来 有人需要自己看看 要是发现有不多的地方也请多多指点
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?