- 浏览: 1088992 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (453)
- Struts2 (30)
- Spring (14)
- iBATIS (6)
- Hibernate (13)
- JVM (5)
- JSON (10)
- Ajax (5)
- Flex (1)
- JavaScript (25)
- PowerDesigner (4)
- 项目管理 (7)
- 数据库 (29)
- 生活 (18)
- 软件应用 (21)
- 无线技术 (2)
- Linux (39)
- TOP开发学习 (2)
- JAVA工具小TIPS (2)
- Java通用 (52)
- XML (3)
- 软件测试 (29)
- Maven (10)
- Jquery (1)
- 正则表达式 (3)
- 应用服务器 (15)
- Android (5)
- linux 和windowx 下 tomcat 设置JVM (8)
- 应用服务器 连接池 (4)
- Linux 后台输出中文乱码 (1)
- Hadoop (28)
- python (2)
- Kafka (7)
- Storm (5)
- Elasticsearch (7)
- fddd (1)
最新评论
-
kafodaote:
Kafka分布式消息系统实战(与JavaScalaHadoop ...
分布式消息系统Kafka初步 -
小灯笼:
LoadRunner性能测试实战课程网盘地址:http://p ...
LoadRunner性能测试应用(八) -
成大大的:
Kafka分布式消息系统实 ...
分布式消息系统Kafka初步 -
hulalayaha2:
Loadrunner性能测试视频教程下载学习:http://p ...
LoadRunner性能测试应用(八) -
993042835:
搞好 谢谢
org.hibernate.exception.ConstraintViolationException: could not delete:
Given final block not properly padded
我也有碰到过这样的问题
原因是:
1、加密完byte[] 后,需要将加密了的byte[] 转换成base64保存,如:
BASE64Encoder base64encoder = new BASE64Encoder();
String encode=base64encoder.encode(bytes);
2、解密前,需要将加密后的字符串从base64转回来再解密,如:
BASE64Decoder base64decoder = new BASE64Decoder();
byte[] encodeByte = base64decoder.decodeBuffer(str);
后面是我的源代码,希望对你有所帮助
import java.io.ByteArrayOutputStream;
import java.security.Key;
import java.security.MessageDigest;
import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
* Security 提供了一个安全算法类,其中包括对称密码算法和散列算法
*/
public final class EbotongSecurity {
// The length of Encryptionstring should be 8 bytes and not be
// a weak key
private final static BASE64Encoder base64encoder = new BASE64Encoder();
private final static BASE64Decoder base64decoder = new BASE64Decoder();
private final static String encoding = "UTF-8";
/**
* 加密字符串
*/
public static String ebotongEncrypto(String str) {
String result = str;
if (str != null && str.length() > 0) {
try {
byte[] encodeByte = symmetricEncrypto(str.getBytes(encoding));
result = base64encoder.encode(encodeByte);
} catch (Exception e) {
e.printStackTrace();
}
}
return result;
}
/**
* 解密字符串
*/
public static String ebotongDecrypto(String str) {
String result = str;
if (str != null && str.length() > 0) {
try {
byte[] encodeByte = base64decoder.decodeBuffer(str);
byte[] decoder = EbotongSecurity.symmetricDecrypto(encodeByte);
result = new String(decoder, encoding);
} catch (Exception e) {
e.printStackTrace();
}
}
return result;
}
/**
* 对称加密方法
*
* @param byteSource
* 需要加密的数据
* @return 经过加密的数据
* @throws Exception
*/
public static byte[] symmetricEncrypto(byte[] byteSource) throws Exception {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
int mode = Cipher.ENCRYPT_MODE;
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
byte[] keyData = { 1, 9, 8, 2, 0, 8, 2, 1 };
DESKeySpec keySpec = new DESKeySpec(keyData);
Key key = keyFactory.generateSecret(keySpec);
Cipher cipher = Cipher.getInstance("DES");
cipher.init(mode, key);
byte[] result = cipher.doFinal(byteSource);
// int blockSize = cipher.getBlockSize();
// int position = 0;
// int length = byteSource.length;
// boolean more = true;
// while (more) {
// if (position + blockSize <= length) {
// baos.write(cipher.update(byteSource, position, blockSize));
// position += blockSize;
// } else {
// more = false;
// }
// }
// if (position < length) {
// baos.write(cipher.doFinal(byteSource, position, length
// - position));
// } else {
// baos.write(cipher.doFinal());
// }
// return baos.toByteArray();
return result;
} catch (Exception e) {
throw e;
} finally {
baos.close();
}
}
/**
* 对称解密方法
*
* @param byteSource
* 需要解密的数据
* @return 经过解密的数据
* @throws Exception
*/
public static byte[] symmetricDecrypto(byte[] byteSource) throws Exception {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
int mode = Cipher.DECRYPT_MODE;
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
byte[] keyData = { 1, 9, 8, 2, 0, 8, 2, 1 };
DESKeySpec keySpec = new DESKeySpec(keyData);
Key key = keyFactory.generateSecret(keySpec);
Cipher cipher = Cipher.getInstance("DES");
cipher.init(mode, key);
byte[] result = cipher.doFinal(byteSource);
// int blockSize = cipher.getBlockSize();
// int position = 0;
// int length = byteSource.length;
// boolean more = true;
// while (more) {
// if (position + blockSize <= length) {
// baos.write(cipher.update(byteSource, position, blockSize));
// position += blockSize;
// } else {
// more = false;
// }
// }
// if (position < length) {
// baos.write(cipher.doFinal(byteSource, position, length
// - position));
// } else {
// baos.write(cipher.doFinal());
// }
// return baos.toByteArray();
return result;
} catch (Exception e) {
throw e;
} finally {
baos.close();
}
}
/**
* 散列算法
*
* @param byteSource
* 需要散列计算的数据
* @return 经过散列计算的数据
* @throws Exception
*/
public static byte[] hashMethod(byte[] byteSource) throws Exception {
try {
MessageDigest currentAlgorithm = MessageDigest.getInstance("SHA-1");
currentAlgorithm.reset();
currentAlgorithm.update(byteSource);
return currentAlgorithm.digest();
} catch (Exception e) {
throw e;
}
}
}
解密的时候报错:
javax.crypto.BadPaddingException: Given final block not properly padded
详细错误信息:
javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.crypto.provider.DESedeCipher.engineDoFinal(DashoA6275)
at com.sun.crypto.provider.DESedeCipher.engineDoFinal(DashoA6275)
at javax.crypto.Cipher.doFinal(DashoA6275)
at ThreeDesTool.decryptMode(ThreeDesTool.java:41)
at Authentication.Authentication(Authentication.java:122)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
评论
发表评论
-
java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
2013-05-10 16:10 817C:\Program Files (x86)\MyEc ... -
读取word pdf中的文字 用第三方组件 pdfbox 和 poi
2013-03-20 23:51 1002读取word pdf中的文字 用第三方组件 pdfbox 和 ... -
非常好使的FileUtil 类
2013-03-09 12:45 1001package com.zqk.util; imp ... -
eclipse 3.4.1 导入项目后 Target runtime Apache Tomcat v5.0 is not defi...
2012-05-29 09:27 1801下载最新版本eclipse3.4.1后,导入以前的项目,报 ... -
MyEclipse 6.5 序列号生成器
2011-06-10 09:47 1664import java.awt.event.ActionEve ... -
字节序 整形与字节数组转换
2010-12-15 13:43 2341Big Endian and Little Endian ... -
JPEG文件数据结构以及将位图保存为JPG的代码 转2
2010-12-02 13:31 2847三、实例分析 用系统自带的画图程序画一个32×24的红色方块 ... -
JPEG文件数据结构以及将位图保存为JPG的代码 转1
2010-12-02 13:30 3047JPEG文件数据结构以及将位图保存为JPG的代码一、简 ... -
Nginx+resin调优文档
2010-11-18 17:02 2300http://blog.liuts.com/post/204/ ... -
分析 Tomcat startup.bat 启动脚本
2010-11-03 14:53 3220分析 Tomcat startup.bat 启 ... -
Tomcat配置优化 转
2010-11-03 14:51 10671.精简Tomcat和配置文件1.1 .删除不需要的管理应用和 ... -
URLConnection 读取字节流
2010-10-27 13:15 32572008-11-08 山寨Wget实现又惹事了 h ... -
字节到整形的转换
2010-10-27 12:47 1418public byte[] intToByte(int i) ... -
Gif 文件格式分析
2010-10-27 11:45 1057GIF文档ˉˉˉˉˉˉ 1.概述~~~~~~~~ ... -
JPG文件格式解码图片高度和宽度的分析
2010-10-27 10:34 984413. 简单说一下 JPG 文件的解码 ---------- ... -
CSS制作多种链接样式
2010-10-15 11:54 1115多种链接样式制作方法 ... -
虚拟主机上给一个网卡设置多个IP地址
2010-10-13 17:22 1879配置虚拟主机时有一种方式是在一块网卡上绑定多个IP,操作如下: ... -
linux下一个网卡配置多个IP
2010-10-13 17:21 958文本控制台下面有netconfig,还有ifconfig工具, ... -
[转载]linux中sar的详细使用
2010-10-13 17:06 880在使用UNIX操作系统的过程中,我们常常 ... -
Linux中sar命令
2010-10-13 17:05 988Linux中sar命令 sar这东 ...
相关推荐
当环境为jdk1.8.0_191之前的版本时,使用jdk自带的AES256加密算法时会报异常Given final block not properly padded Input length must be multiple of 16 when decrypting with padded cipher,可通过将此附件解压...
这里我们遇到了一个问题:"pad block corrupted",这是一个关于加密解密过程中的错误提示,通常与填充块相关。在AES(Advanced Encryption Standard)加密算法中,如果解密时发现填充不正确,就会出现这种错误。下面...
windows上加解密正常,linux上加密正常,解密时发生 异常: javax.crypto.BadPaddingException: Given final block not properly padded
javax.crypto.BadPaddingException: Given final block not properly padded at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..) at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..) at ...
在Java中,我们可以使用`javax.crypto`包中的`Cipher`类来实现加密和解密操作。 1. **基于字符串的AES加密**: - 首先,需要将字符串转换为字节数组,可以使用UTF-8编码。 - 然后,创建一个`KeySpec`对象,例如`...
本文将深入探讨AES加密,特别是使用CBC(Cipher Block Chaining,密码块链接)模式和PKCS5Padding填充方式,并在JavaScript、Java和iOS平台上实现这一加密过程。 **一、AES加密简介** AES是一种对称加密算法,由...
标题中的“在64位机器上使用plSQL连接Oracle的问题(SQLNet not properly installed)”提示了我们在64位操作系统中尝试使用plSQL Developer工具与Oracle数据库建立连接时遇到的一个常见问题,即SQLNet配置不正确。...
在Windows系统上能够正常进行加解密,但在Linux系统中出现解密异常,报错信息为“Given final block not properly padded”,提示最后的区块填充不正确。这个问题通常与加密使用的填充方式、随机数生成器(Random ...
(DBX Error: Driver could not be properly initialized. Client library may be missing, not installed properly, ...),我找到了合适的libmysql.dll和dbxmys.dll组合,把下面这个libmysql.dll拷贝到XE的bin目录...
ORA-00933: SQL command not properly ended ``` 解决方法是确保SQL语句完整无误,并使用正确的语法进行删除操作。 #### 四、总结 Oracle的回收站功能为用户提供了一个方便的方式来管理数据库对象的删除与恢复,极...
异常信息提示"Given final block not properly padded",这意味着在解密过程中遇到了不正确的填充。这个错误通常是由以下原因引起的: 1. **密钥生成问题**:在原始的代码中,密钥生成器(_generator)初始化时使用了...
visualroute 2010 在使用eclvr14c进行破解时,提示"VisualRoute is not installed properly ",经本人多次跟踪实践发现问题在缺少文件上: 检查安装完后在C:\Documents and Settings\Administrator\下是否有mswin32v16....
当用户遇到“Ming-WebReport viewer has not been installed properly.”的错误提示时,通常意味着报表查看器没有正确安装或者配置不完整,这会影响报表的正常显示和使用。本文将详细介绍如何解决这个问题。 首先,...
SWT 资源释放问题详解 SWT(Standard Widget Toolkit)是一种基于 Java 的 GUI 工具包,提供了丰富的图形用户界面组件和事件处理机制。但是, SWT 中的资源释放问题是一件棘手的事情。如果不正确地释放资源,可能...
由于公司业务并发比较高需要高可用使用LVS keeplived。在linux系统centos6.5版本中安装keeplived时,需要... OpenSSL is not properly installed on your system. !!! !!! Can not include OpenSSL headers files. !!!
- 输入要加密/解密的文件的路径,可以是相对路径,也可以是绝对路径。 - Choose to encrypt (1) or decrypt (2) the file - Enter a password. If you choose “decrypt” in the previous step, the password must ...
"il2cpp.exe did not run properly!"这个错误提示表明在编译IL( Intermediate Language)代码到JavaScript和WebAssembly的过程中出现了问题。以下是解决此类问题的一些常见步骤: 1. **检查Unity版本**:确保你...
Final Uninstaller provides an easy and comprehensive solution for uninstalling unwanted programs, whether it's running properly on your computer now or it has been corrupted and leaves some remnants ...
描述中提到的"Stride is not properly defined yet, default to 0x10 for Axon."表明在某个特定的代码段或库(可能是与"axon"相关的)中,Stride尚未被正确地定义。在这种情况下,开发人员可能已经设定一个默认值0x...
在IT行业中,Delphi是一种流行的面向对象的编程环境,它基于Pascal语言,而MySQL则是一种广泛使用的开源关系型数据库管理系统。将Delphi与MySQL结合使用,开发者可以创建高效、可靠的数据库应用程序。...