• 报错问题解决办法:Decryption error sun.security.rsa.RSAPadding.unpadV15


    报错问题解决办法:Decryption error sun.security.rsa.RSAPadding.unpadV15

    出现的问题

    javax.crypto.BadPaddingException: Decryption error
        at sun.security.rsa.RSAPadding.unpadV15(RSAPadding.java:380) ~[na:1.8.0_131]
        at sun.security.rsa.RSAPadding.unpad(RSAPadding.java:291) ~[na:1.8.0_131]
        at com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:356) ~[sunjce_provider.jar:1.8.0_112]
        at com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:389) ~[sunjce_provider.jar:1.8.0_112]
        at javax.crypto.Cipher.doFinal(Cipher.java:2048) ~[na:1.8.0_121]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    解决办法:
    采用相同提供者组件
    com.sun.crypto.provider.SunJCE

    SunJCE provider=new com.sun.crypto.provider.SunJCE();
    Security.addProvider(provider);
    Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm(),provider);
    
    • 1
    • 2
    • 3
    //必须自己生成下面两个密钥
        private static final String PUBLIC_KEY = "自己生成公钥";
        private static final String PRIVATE_KEY="自己生成私钥";
        //
    
    • 1
    • 2
    • 3
    • 4

    调用方法:

    String pwd = RsaUtil.DecryptByPrivateKey(pwd_web);
    String web=RsaUtil.encryptByPublicKey(pwd);
    String pwd2 = RsaUtil.DecryptByPrivateKey(web);
    
    • 1
    • 2
    • 3

    执行的两个方法代码:

    //加密-公 OK
        public static String encryptByPublicKey(String data)
        {
            String r="";
            try {
                byte[] itemResultBytes = encryptByPublicKey(data, PUBLIC_KEY);
                r= Base64.encode(itemResultBytes);
            } catch (Exception e) {
                e.printStackTrace();
                System.err.println("encryptByPublicKey加密出错:" + e.getMessage() + ":" + "加密内容:" + data);
                throw new RuntimeException("rsa加密失败");
            }
            return r;
        }
    
        //解密-私    OK
        public static String DecryptByPrivateKey(String content)
        {
            return jsencryptDecryptByPrivateKeyLong(content,PRIVATE_KEY);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  • 相关阅读:
    3D场景上的人体生成器【附有源码】
    线索二叉树
    【无人机】基于A星算法解决无人机二维路径规划问题含matlab代码
    每隔一段时间自动敲键盘的的vbs脚本
    奔跑的大学生
    【ROS】ROS2命令行工具详解
    3款国产办公软件,不仅好用,还支持linux国产操作系统
    一款客服系统有哪些必备的功能模块?
    C语言经典面试题目(十二)
    云原生之k8s--------Kubernetes原理
  • 原文地址:https://blog.csdn.net/hsg77/article/details/133996410