Java实现DES/ECB/PKCS7Padding加密算法

DES/ECB/PKCS7Padding加密算法:在Java开发中,用到的DES的ECB加密模式、PKCS7Padding填充方式,Java目前仅支持PKCS5Padding填充模式

问题描述

java.security.NoSuchAlgorithmException: Cannot find any provider supporting AES/CBC/PKCS7Padding

问题分析

java默认支持是PKCS5Padding填充方式 。

目前Java要实现PKCS7Padding填充模式的加密,需要借助第三方Jar包才可以实现,就是在初始化的时候 Security.addProvider 增加第三方的提供者,解密的时候还是按照原来的方式。

解决方案

BouncyCastle官网下载组件以支持PKCS7Padding填充。

2、把下载的bcprov-ext-jdk15to18-166.jar分别复制到

${jdk_home}\jre\lib\ext

(eg:D:\Java\jdk1.8.0_221\jre\lib\ext)

${jre_home}\lib\ext

(eg:D:\Java\jre1.8.0_221\lib\ext)

3、修改java.security文件

${jdk_home}\jre\lib\security\java.security

(eg:D:\Java\jdk1.8.0_221\jre\lib\security\java.security)

${jre_home}\lib\security\java.security

(eg:D:\Java\jre1.8.0_221\lib\security\java.security)

4、在3中找到的两个文件中搜索

security.provider.10=sun.security.mscapi.SunMSCAPI

然后在下面添加Java的默认加密提供者,保存,重启工作空间重新build项目;

security.provider.11=org.bouncycastle.jce.provider.BouncyCastleProvider

在使用AES前,加入下面代码即可,如果显示该class还没导入,那就手动导入到该工程就好;

Security.addProvider(new BouncyCastleProvider());

使用DES/ECB加密,加入下面的静态代码块来添加默认加密提供者即可;

static {
   
        Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
        }

如果是Maven项目;

<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on -->
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.60</version>
</dependency>

同样使用下面的静态代码块来添加默认加密提供者即可;

  static {
       
        Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
    }

5.以下是一个亲测可用的采用ECB模式的DES加密,padding使用PKCS7的加密工具类

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.Key;
import java.security.Security;

import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

public class DESUtil {
   

    private final static String ALGORITHM_DES = "DES/ECB/PKCS7Padding";

    //设置java支持PKCS7Padding
    static {
   
        Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
    }

    //获取加密或解密的Cipher对象:负责完成加密或解密工作
    private static Cipher GetCipher(int opmode, String key) {
   
        try {
   
            //根据传入的秘钥内容生成符合DES加密解密格式的秘钥内容
            DESKeySpec dks = new 
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值