linux上java解加密(AES/CBC)异常:java.lang.SecurityException: JCE cannot authenticate the provider BC办法

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 用mapreduce做数据清洗的时候,需要对数据进行解密,加密方法是:AES/CBC/PKCS7Padding,由于java本身不支持,需要添加依赖。

用mapreduce做数据清洗的时候,需要对数据进行解密,加密方法是:AES/CBC/PKCS7Padding,由于java本身不支持,需要添加依赖,用的依赖是:


1<dependency>


2         <groupId>org.bouncycastle</groupId>


3         <artifactId>bcprov-jdk15on</artifactId>


4         <version>1.56</version>


5</dependency>


加密解密用的工具类,附上代码:

微信图片_20220429180953.gif

1package com.js.utils;

2

3import org.bouncycastle.jce.provider.BouncyCastleProvider;

4

5import javax.crypto.Cipher;

6import javax.crypto.spec.IvParameterSpec;

7import javax.crypto.spec.SecretKeySpec;

8import java.security.Key;

9import java.security.Security;

10import java.util.Arrays;

11

12publicclass AESCBCUtil {

13     // 算法名称

14     final String KEY_ALGORITHM = "AES";

15     // 加解密算法/模式/填充方式

16     final String algorithmStr = "AES/CBC/PKCS7Padding";

17     //

18     private Key key;

19     private Cipher cipher;

20     boolean isInited = false;

21

22     byte[] iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };

23     publicvoid init(byte[] keyBytes) {

24

25         // 如果密钥不足16位,那么就补足.  这个if 中的内容很重要

26         int base = 16;

27         if (keyBytes.length % base != 0) {

28             int groups = keyBytes.length / base + (keyBytes.length % base != 0 ? 1 : 0);

29             byte[] temp = newbyte[groups * base];

30             Arrays.fill(temp, (byte) 0);

31             System.arraycopy(keyBytes, 0, temp, 0, keyBytes.length);

32             keyBytes = temp;

33        }

34         // 初始化

35         Security.addProvider(new BouncyCastleProvider());

36         // 转化成JAVA的密钥格式

37         key = new SecretKeySpec(keyBytes, KEY_ALGORITHM);

38         try {

39             // 初始化cipher

40             cipher = Cipher.getInstance(algorithmStr, "BC");

41         }catch (Exception e){

42            e.printStackTrace();

43        }

44    }

45     /**

46     * 加密方法

47     * @param content 要加密的字符串

48     * @param keyBytes 加密密钥

49     * @return

50      */

51     publicbyte[] encrypt(byte[] content, byte[] keyBytes) {

52         byte[] encryptedText = null;

53        init(keyBytes);

54         try {

55             cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(iv));

56             encryptedText = cipher.doFinal(content);

57         } catch (Exception e) {

58            e.printStackTrace();

59        }

60         return encryptedText;

61    }

62     /**

63     * 解密方法

64     * @param encryptedData 要解密的字符串

65     * @param keyBytes 解密密钥

66     * @return

67      */

68     publicbyte[] decrypt(byte[] encryptedData, byte[] keyBytes) {

69         byte[] encryptedText = null;

70        init(keyBytes);

71         try {

72             cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(iv));

73             encryptedText = cipher.doFinal(encryptedData);

74         } catch (Exception e) {

75            e.printStackTrace();

76        }

77         return encryptedText;

78    }

79 }

微信图片_20220429181000.gif

windows开发mapreduce程序的时候,测试没问题,但是上linux集群就会报错:

微信图片_20220429181005.gif

愁死人了,从来没有遇到过这种问题,没办法,看博客!


其实,这是由于linux版本java与windows有一些区别导致的,解决方法如下:


1、在mvn仓库中找到下载的包bcprov-jdk15on-1.56.jar,或者如果你不用maven,只要能下载到这个包,放到linux的$JAVA_HOME/jre\lib\ext下面;


2、配置我的安全属性文件:vim /usr/java/jdk1.8.0_112/jre/lib/security/java.security

微信图片_20220429181008.gif

1 security.provider.1=sun.security.provider.Sun

2 security.provider.2=sun.security.rsa.SunRsaSign

3 security.provider.3=sun.security.ec.SunEC

4 security.provider.4=com.sun.net.ssl.internal.ssl.Provider

5 security.provider.5=com.sun.crypto.provider.SunJCE

6 security.provider.6=sun.security.jgss.SunProvider

7 security.provider.7=com.sun.security.sasl.Provider

8 security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI

9 security.provider.9=sun.security.smartcardio.SunPCSC

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

微信图片_20220429180909.png

第10行是我添加的,是由自己文件内容编号来确定的;


由于是分布式集群,每个节点都要环境一样哦!


完成这些配置后,重新执行这个任务,成功!

目录
相关文章
|
3月前
|
存储 安全 数据安全/隐私保护
打造安全防线!Python AES&RSA加密工具,黑客绕道走的秘籍
【9月更文挑战第9天】随着数字化时代的到来,信息安全问题日益凸显。本文将介绍如何使用Python结合AES与RSA两种加密算法,构建强大的加密工具。AES以其高效性和强安全性著称,适用于大量数据的快速加密;RSA作为非对称加密算法,在加密小量数据及实现数字签名方面表现卓越。通过整合两者,可以构建既安全又灵活的加密系统。首先,需要安装pycryptodome库。接着,实现AES加密与解密功能,最后利用RSA加密AES密钥,确保其安全传输。这种设计不仅提高了数据传输效率,还增强了密钥交换的安全性,为敏感数据提供坚实保护。
239 43
|
3月前
|
存储 安全 数据安全/隐私保护
浅谈对称加密(AES与DES)
浅谈对称加密(AES与DES)
83 1
|
1月前
|
JSON Java 关系型数据库
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应数据库中json数据类型,更新时报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
59 4
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
|
1月前
|
监控 Ubuntu Linux
使用VSCode通过SSH远程登录阿里云Linux服务器异常崩溃
通过 VSCode 的 Remote - SSH 插件远程连接阿里云 Ubuntu 22 服务器时,会因高 CPU 使用率导致连接断开。经排查发现,VSCode 连接根目录 ".." 时会频繁调用"rg"(ripgrep)进行文件搜索,导致 CPU 负载过高。解决方法是将连接目录改为"root"(或其他具体的路径),避免不必要的文件检索,从而恢复正常连接。
|
2月前
|
Linux 开发工具 数据安全/隐私保护
linux异常一:feng 不在 sudoers 文件中,此事将被报告。yum提示Another app is currently holding the yum lock; waiting for
这篇文章介绍了在CentOS 7系统中安装Docker时遇到的两个常见问题及其解决方法:用户不在sudoers文件中导致权限不足,以及yum被锁定的问题。
48 2
linux异常一:feng 不在 sudoers 文件中,此事将被报告。yum提示Another app is currently holding the yum lock; waiting for
|
2月前
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
213 2
|
2月前
|
安全 算法 Java
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
本文提供了在数据库中对密码等敏感信息进行加盐加密的详细教程,包括手写MD5加密算法和使用Spring Security的BCryptPasswordEncoder进行加密,并强调了使用BCryptPasswordEncoder时需要注意的Spring Security配置问题。
210 0
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
|
3月前
|
数据安全/隐私保护
aes之ecb模式的加密解密
aes之ecb模式的加密解密
|
3月前
|
Oracle Java 关系型数据库
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
如果遇到"exec format error"问题,文章建议先检查Linux操作系统是32位还是64位,并确保安装了与系统匹配的JDK版本。如果系统是64位的,但出现了错误,可能是因为下载了错误的JDK版本。文章提供了一个链接,指向Oracle官网上的JDK 17 Linux版本下载页面,并附有截图说明。
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
|
3月前
|
存储 安全 数据安全/隐私保护
安全升级!Python AES加密实战,为你的代码加上一层神秘保护罩
【9月更文挑战第12天】在软件开发中,数据安全至关重要。本文将深入探讨如何使用Python中的AES加密技术保护代码免受非法访问和篡改。AES(高级加密标准)因其高效性和灵活性,已成为全球最广泛使用的对称加密算法之一。通过实战演练,我们将展示如何利用pycryptodome库实现AES加密,包括生成密钥、初始化向量(IV)、加密和解密文本数据等步骤。此外,还将介绍密钥管理和IV随机性等安全注意事项。通过本文的学习,你将掌握使用AES加密保护敏感数据的方法,为代码增添坚实的安全屏障。
157 8