java对称解密问题

问题描述

//encodedata BASE64编码后加密密文 //key BASE64编码后对称密钥对 //algorithmName 加密算法 public static String decodeforp1(String encodedata,String key,String algorithmName){ try {SecretKeySpec k = new SecretKeySpec(Base64.decode(key.getBytes()),algorithmName); //解密 Cipher cp = Cipher.getInstance(algorithmName); cp.init(Cipher.DECRYPT_MODE, k); byte[] ptext = cp.doFinal(Base64.decode(encodedata.getBytes())); String s = new String(Base64.encode(ptext));return s;} catch (InvalidKeyException e) {e.printStackTrace();} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (NoSuchPaddingException e) {e.printStackTrace();} catch (IllegalBlockSizeException e) {e.printStackTrace();} catch (BadPaddingException e) {e.printStackTrace();}return null; }调用过程String key="HK6Jy6OrfB7ZkZg6WD/rQIZfNeFn+nrrXQCTfN7Cv3cAADoAAAAAAOPCv3cAAAAAAM35CFzU/wsIAAAAVNT/C8LWWgwUwXwDkMB8A+GrWgzEwXwDlFzAd3AgvncAAAAAZAYAAK8nVQwUwXwDZAAAAEAAAABn0/8LXNT/C9PAWgwUwXwDQAAAAATBfAMJTRN4SLuBCnzBfAMAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABEWnGJorzX8xAuTW1+kKO3zOL5ESpEX3uYttX1BhgrP1RqgZmyzOcDID5dfY6gs8fc8gkhOlRvi6jG5QUWKDtPO7f8CyC1YQxQvmEMAAAAAASCwBckn0F6gAAAAGjT/ws=";String encodedata="MWY4OWQ5M2ZmMWFiNzk5N2VlOGViYzgwZGFlMDZhNTExYjBiNzk4Yd4j2eRQnsXNu5BWFsvJGXw=";String algorithmName="DESede";String date=encodeforp1(data, key, algorithmName);System.out.println(date);但会报错java.security.InvalidKeyException: Wrong key sizeat com.sun.crypto.provider.SunJCE_y.a(DashoA13*..)at com.sun.crypto.provider.SunJCE_g.a(DashoA13*..)at com.sun.crypto.provider.SunJCE_f.a(DashoA13*..)at com.sun.crypto.provider.SunJCE_f.a(DashoA13*..)at com.sun.crypto.provider.DESedeCipher.engineInit(DashoA13*..)at javax.crypto.Cipher.a(DashoA13*..)at javax.crypto.Cipher.a(DashoA13*..)at javax.crypto.Cipher.init(DashoA13*..)at javax.crypto.Cipher.init(DashoA13*..)at com.szca.authenti.util.CAUtil.encodeforp1(CAUtil.java:67)at com.szca.authenti.util.Test.main(Test.java:61)求解问题补充没人自己顶下问题补充已经找出原因了 JDK对DESede算法密钥对长度是112位和168位 而我的这个密钥对是192位的问题补充谢谢 fastbo问题补充而且KEY也有很大的问题,KEY是C产生的密钥对,它把整个对象都包装在一起再返回的,所以用它来封装密钥是有问题的问题补充进行两天的努力已经把问题得到解决,学到的东西还真不少

解决方案

引用java.security.InvalidKeyException: Wrong key size这里不是很明显写着原因吗?错误的key大小。我以前做过一个AES-128-CBC加密模式的加解密的东西,key需要为16位,程序里还做了判断。DES算法里的key位数估计也是有规定的。代码供你参考。// 解密public static String decrypt(String sSrc, String sKey) throws Exception {try {// 判断Key是否正确if (sKey == null) {System.out.print("Key为空null");return null;}// 判断Key是否为16位if (sKey.length() != 16) {System.out.print("Key长度不是16位");return null;}byte[] raw = sKey.getBytes("ASCII");SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");IvParameterSpec iv = new IvParameterSpec("0102030405060708".getBytes());cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);// 先用base64解密try {byte[] original = cipher.doFinal(encrypted1);String originalString = new String(original);return originalString;} catch (Exception e) {System.out.println(e.toString());return null;}} catch (Exception ex) {System.out.println(ex.toString());return null;}}

时间: 2024-09-23 08:07:07

java对称解密问题的相关文章

JAVA加密解密之对称加密

写的一个JAVA对称加密的工具类,支持DES.DESede.AES.Blowfish.RC2.RC4的加密解密. DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1976年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),随后在国际上广泛流传开来. DESede是由DES对称加密算法改进后的一种对称加密算法.使用 168 位的密钥对资料进行三次加密的一种机制:它通常(但非始终)提供极其强大的安全性.如果三个 56 位的子元素都

JAVA加密解密:自定义类加载器应用

最近在研究JAVA CLASS LOADING技术,已实现了一个自定义的加载器.对目前自定义加载器的应用,还在探讨中.下面是自定义的CLASSLOADER在JAVA加密解密方面的一些研究. JAVA安全 JAVA是解释执行的语言,对于不同的操作平台都有相应的JVM对字节码文件进行解释执行.而这个字节码文件,也就是我们平时所看到的每一个.class文件. 这是我们大家都知道的常识,也就是由.java文件,经过编译器编译,变成JVM所能解释的.class文件. 而这个过程,在现在公开的网络技术中,利

Java加密解密

JAVA是解释执行的语言,对于不同的操作平台都有相应的JVM对字节码文件进行解释执行.而这个字节码文件,也就是我们平时所看到的每一个.class文件.这是我们大家都知道的常识,也就是由.java文件,经过编译器编译,变成JVM所能解释的.class文件.而这个过程,在现在公开的网络技术中,利用一个反编译器,任何人都可以很容易的获取它的源文件.这对于很多人来说是不希望看到的.对于加密解密技术,我懂的不多,有些可以利用某种技术"模糊"JAVA类文件.这样能够使反编译的难度增加.但估计反编译

Java加解密技术系列之RSA详解_java

距离上一次写博客感觉已经很长时间了,先吐槽一下,这个月以来,公司一直在加班,又是发版.上线,又是新项目太紧,具体的就不多说了.今天来说说非对称加密真的是太重要了,我们的日常生活中,都离不开非对称加密. 概念 在说 RSA 之前,首先聊聊什么是非对称加密.在讲对称加密的时候,就曾经说过,对称加密算法在加密和解密时使用的是同一个秘钥,加解密双方必须使用同一个密钥才能进行正常的沟通.而非对称加密则不然,非对称加密算法需要两个密钥来进行加密和解密,分别是公钥和私钥. 需要注意的一点,这个公钥和私钥必须是

Java加密解密工具(适用于JavaSE/JavaEE/Android)_java

本文实例为大家分享了一个适用于JavaSE/JavaEE/Android的Java加密解密工具,供大家学习,具体内容如下 package longshu.utils.security; import java.lang.reflect.Method; import java.security.InvalidKeyException; import java.security.Key; import java.security.MessageDigest; import java.security

文件操作-ASP.NET对称解密后Response文件流下载

问题描述 ASP.NET对称解密后Response文件流下载 一个AES对称加密压缩文件用AES解密后使用MemoryStream内存文件流存放后转换为byte[]字节流数组使用Response文件流输出方式输出.压缩文件打开的时候提示文件流出错,内容一样可以查看说明解密成功了.使用FileStream保存文件无任何异常. ` 解决方案 http://www.cnblogs.com/chaoa/archive/2012/03/09/2386106.html

java加解密-数字证书

一.概述   1.我们了解了对称加密算法.非对称加密算法.数字签名算法应用,他们组合起来使用就是数字证书   2.对称加密算法用来加解密数据,非对称加密算法常用来做密钥交换.数字签名算法主要用来验证数据的不可否认性   3.数字证书:对于我们来说最常见的就是银行给我们提供的数字证书,以文件下载的方式保存,或者以u盾的方式保存   4.数字证书其实就是我们非对称加密算法中存放了相关算法的公钥信息 二.模型分析     我们要制造数字证书.可以用openssl和java的keytools来获得,op

JAVA加密解密之DH算法

Diffie-Hellman:一种确保共享KEY安全穿越不安全网络的方法,它是OAKLEY的一个组成部分.Whitfield Diffie与Martin Hellman在1976年提出了一个奇妙的密钥交换协议,称为Diffie-Hellman密钥交换协议/算法(Diffie-Hellman Key Exchange/Agreement Algorithm).这个机制的巧妙在于需要安全通信的双方可以用这个方法确定对称密钥.然后可以用这个密钥进行加密和解密.但是注意,这个密钥交换协议/算法只能用于密

java对称加密-java 如何实现 以下c# 对称加密可逆算法

问题描述 java 如何实现 以下c# 对称加密可逆算法 using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace DataCrypto { /// /// 对称加密算法类 /// public class SymmetricMethod { private SymmetricAlgorithm mobjCryptoService; private string