当前位置:网站首页>Input length must be multiple of 8 when decrypting with padded cipher
Input length must be multiple of 8 when decrypting with padded cipher
2022-07-31 05:08:00 【小果子^_^】
Des密码加密报错:Input length must be multiple of 8 when decrypting with padded cipher
错误原因:
- 判断加密代码上一句执行的是否是解密
我的是先执行解密,然后加密,报的这个错误,原本是直接加密就好的 - 针对文件加密多写了一个字符
附上加密解密代码:
解密:直接调用DesUtil的decrypt方法即可
// DES解密key,限定24位
String DES_KEY = "WfJTKO9S4eLkrPz2JKrAnzdb";
// DES解密iv,限定8位
String DES_IV = "D076D35C";
String pwd = DesUtil.decrypt(userDto.getPsw(), ContentSecurityConstants.DES_KEY,
ContentSecurityConstants.DES_IV);
加密:
- 生成盐值
public static final Integer SALT_SIZE = 8;
/** * 生成随机的Byte[]作为salt. * * @param numBytes * byte数组的大小 */
public static byte[] generateSalt(int numBytes) {
Validate.isTrue(numBytes > 0, "numBytes argument must be a positive integer (1 or larger)", numBytes);
byte[] bytes = new byte[numBytes];
random.nextBytes(bytes);
return bytes;
}
public static byte[] generateSaltFix() {
return generateSalt(SALT_SIZE);
}
// 盐值
byte[] salt = generateSaltFix();
- PasswdService接口类
/** * 密码 * @param saltBytes 混淆码数组 * @param rawPass 明文密码 * @return 密码 */
public String entryptPassword(byte[] saltBytes,String rawPass);
- PasswdServiceImpl接口实现类
@Override
public String entryptPassword(byte[] saltBytes, String rawPass) {
String encPass = CredentialsDigest.digest(rawPass, saltBytes);
return encPass;
}
- CredentialsDigest证书加密接口
public interface CredentialsDigest {
/** * 散列生成摘要 * @Title: digest * @param plainCredentials 密码明文 * @param salt 混淆码数组 * @return: String */
public String digest(String plainCredentials, byte[] salt);
}
- CredentialsDigest证书加密抽象实现类
/** * Hash证书加密 * */
public abstract class AbstractHashCredentialsDigest implements CredentialsDigest {
public static final int HASH_INTERATIONS = 1024;
@Override
public String digest(String plainCredentials, byte[] salt) {
if (StringUtils.isBlank(plainCredentials)) {
return null;
}
byte[] hashPassword = digest(Cryptos.utf8encode(plainCredentials), salt);
return Encodes.encodeHex(hashPassword);
}
/** * 需要实现加密转换 * @Title: digest * @param input 输入字节数组 * @param salt 混淆字节数组 * @return: byte[] */
protected abstract byte[] digest(byte[] input, byte[] salt);
}
- 不同加密方式(当前使用的是SHA1密码加密 )
(1) SHA1证书加密
public class Sha1CredentialsDigest extends AbstractHashCredentialsDigest {
@Override
protected byte[] digest(byte[] input, byte[] salt) {
return Digests.sha1(input, salt, HASH_INTERATIONS);
}
}
(2) SHA256证书加密
/** * SHA256证书加密 */
public class Sha256CredentialsDigest extends AbstractHashCredentialsDigest implements
CredentialsDigest {
@Override
protected byte[] digest(byte[] input, byte[] salt) {
return Digests.sha256(input, salt, HASH_INTERATIONS);
}
}
(3) SHA512加密方式
/** * SHA512证书加密 */
public class Sha512CredentialsDigest extends AbstractHashCredentialsDigest implements
CredentialsDigest {
@Override
protected byte[] digest(byte[] input, byte[] salt) {
return Digests.sha512(input, salt, HASH_INTERATIONS);
}
}
边栏推荐
- PWN ROP
- 面试官竟然问我怎么分库分表?幸亏我总结了一套八股文
- MYSQL一站式学习,看完即学完
- MySQL8.0.26安装配置教程(windows 64位)
- Sql解析转换之JSqlParse完整介绍
- Duplicate entry ‘XXX‘ for key ‘XXX.PRIMARY‘解决方案。
- PCL calculates the point cloud coordinate maximum and its index
- Lua,ILRuntime, HybridCLR(wolong)/huatuo热更新对比分析
- matlab simulink欠驱动水面船舶航迹自抗扰控制研究
- Numpy中np.meshgrid的简单用法示例
猜你喜欢
随机推荐
【云原生】DevOps(五):集成Harbor
110 MySQL interview questions and answers (continuously updated)
12 reasons for MySQL slow query
pycharm专业版使用
MySQL database backup
Temporal对比Cadence
STM32——DMA
MySQL优化:从十几秒优化到三百毫秒
mysql5.7.35安装配置教程【超级详细安装教程】
精解四大集合框架:List 核心知识总结
The MySQL database installed configuration nanny level tutorial for 8.0.29 (for example) have hands
限流的原理
Unity Tutorial: URP Rendering Pipeline Practical Tutorial Series [1]
matlab simulink欠驱动水面船舶航迹自抗扰控制研究
Go中间件
DVWA靶场环境搭建
EasyExcel的简单读取操作
Unity resources management series: Unity framework how to resource management
C Implementation of Simple Network File Copy
SQL statement to range query time field









