精华内容
下载资源
问答
  • Java后台 微信小程序解密获取openid 过程 AES解密错误,报错java.security.NoSuchAlgorithmException:Cannot find any provider supporting AES/CBC/PKCS7Padding, 这是因为jdk不支持PKCS7Padding 的填充方式, 将...

        Java后台 微信小程序解密获取openid 过程 AES解密错误,报错java.security.NoSuchAlgorithmException:Cannot find any provider supporting AES/CBC/PKCS7Padding, 这是因为jdk不支持PKCS7Padding 的填充方式, 将AES/CBC/PKCS7Padding改成PKCS5Padding试试,这两种填充方式区别不大,测试是可以的。

    package com.szwisdom.fmp.app.server.common.util;
    
    import org.apache.commons.codec.binary.Base64;
    import javax.crypto.Cipher;
    import javax.crypto.spec.IvParameterSpec;
    import javax.crypto.spec.SecretKeySpec;
    
    import java.security.*;
    import org.bouncycastle.jce.provider.BouncyCastleProvider;
    
    
    public class AesCbcUtil {
    
          static {
                //BouncyCastle是一个开源的加解密解决方案,主页在http://www.bouncycastle.org/
                Security.addProvider(new BouncyCastleProvider());
            }
    
        /**
         * AES解密
         *
         * @param data           //密文
         * @param key            //秘钥
         * @param iv             //偏移量
         * @param encodingFormat //编码(UTF-8)
         * @return
         * @throws Exception
         */
        public static String decrypt(String data, String key, String iv, String encodingFormat) throws Exception {
            //被加密的数据
            byte[] dataByte = Base64.decodeBase64(data.getBytes());
            //加密秘钥
            byte[] keyByte = Base64.decodeBase64(key.getBytes());
            //偏移量
            byte[] ivByte = Base64.decodeBase64(iv.getBytes());
    
    
            try {
                Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    
                SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");
    
                AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");
                parameters.init(new IvParameterSpec(ivByte));
    
                cipher.init(Cipher.DECRYPT_MODE, spec, parameters);// 初始化
    
                byte[] resultByte = cipher.doFinal(dataByte);
                if (null != resultByte && resultByte.length > 0) {
                    String result = new String(resultByte, encodingFormat);
                    return result;
                }
                return null;
            } catch (Exception e) {
                e.printStackTrace(); 
            }
    
            return null;
        }
    
    }

     

    展开全文
  • I am writing android app that makes AES encryption/decryption of files. I want to be able to detect if incorrect password is specified and thus not matching key is derived for decryption.I am using AE...

    I am writing android app that makes AES encryption/decryption of files. I want to be able to detect if incorrect password is specified and thus not matching key is derived for decryption.

    I am using AES/CBC/PKCS7Padding with 256 bit key.

    If I do cipher.doFinal() I can try/catch the BadPaddingException and it tells me that something is wrong and probably key was incorrect. But if I use CipherInputStream to read encrypted file, I get no feedback on correctness of padding. So if I deliberately specify incorrect password it decrypts file, then reports that everything is ok, however decrypted file is a total junk.

    So my question is how to detect bad padding when using CipherInputStream?

    解决方案

    Here is modified version of getMoreData() method in CipherInputStream, it maybe useful for someone who faced my problem:

    private int getMoreData() throws IOException {

    if (done) return -1;

    int readin = input.read(ibuffer);

    if (readin == -1) {

    done = true;

    try {

    obuffer = cipher.doFinal();

    }

    catch (IllegalBlockSizeException e) {

    throw new IOException(e);

    }

    catch (BadPaddingException e) {

    throw new IOException(e);

    }

    if (obuffer == null)

    return -1;

    else {

    ostart = 0;

    ofinish = obuffer.length;

    return ofinish;

    }

    }

    try {

    obuffer = cipher.update(ibuffer, 0, readin);

    } catch (IllegalStateException e) {obuffer = null;};

    ostart = 0;

    if (obuffer == null)

    ofinish = 0;

    else ofinish = obuffer.length;

    return ofinish;

    }

    展开全文
  • AES解密失败处理

    千次阅读 2021-01-18 18:41:40
    异常java.security.InvalidKeyException:illegal Key Size,是因为美国对加密解密等软件进行了出口限制,Java 发布的运行环境包中的加解密有一定的限制,比如默认不允许 256 位密钥的 AES解密(在Java的核心类库...

    现象场景

    项目背景是基于企业微信开发的一套中台系统,本地调试企业微信回调的时候出现解密失败

    为什么会出现

    在这里插入图片描述
            异常java.security.InvalidKeyException:illegal Key Size,是因为美国对加密解密等软件进行了出口限制,Java 发布的运行环境包中的加解密有一定的限制,比如默认不允许 256 位密钥的 AES 加解密(在Java的核心类库中有一个JCE(Java Cryptography Extension),JCE是一组包,它们提供用于加密、密钥生成和协商以及 Message Authentication Code(MAC)算法的框架和实现,在我们安装的JRE目录下有这样一个文件夹:
    %JAVE_HOME%\jre\lib\security,其中包含有两个.jar文件:“local_policy.jar ”和“US_export_policy.jar”,默认是支持128位密钥的加密算法)。
    在这里插入图片描述

    ,而企业微信API中加解密方案使用的是32个字节(256位)的密钥,已经超出它的范围,无法支持,所以才会报:“java.security.InvalidKeyException: Illegal key size”的异常

    如何解决

    A:官网下载相应JDK版本对应的JCE无限制权限策略文件,替换掉JRE对应的%JAVE_HOME%\jre\lib\security目录下的“local_policy.jar ”和“US_export_policy.jar”包
    JDK8:
    官网JRE下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
    百度云盘:https://pan.baidu.com/s/12-7IbEzDAuXGClRkrg3M8g 提取码:2f87
    B:升级JDK版本,java 版本在 1.8.0_161之后默认支持256位密钥,我本地JDK版本是1.8.0_40,所以会出现如上问题
          官网java8发行版更改说明链接
    在这里插入图片描述

    展开全文
  • JAVA LIUNX AES解密失败,历史数据怎么解密 欢迎使用Markdown编辑器 错误代码: KeyGenerator kgen = KeyGenerator.getInstance(“AES”); kgen.init(128, new SecureRandom(password.getBytes())); 正确代码: ...

    windows环境下加密解密正常,但是部署到linux服务器加密成功解密失败

    错误代码:
    KeyGenerator kgen = KeyGenerator.getInstance(“AES”);
    kgen.init(128, new SecureRandom(password.getBytes()));
    正确代码:
    KeyGenerator kgen = KeyGenerator.getInstance(“AES”);
    SecureRandom secureRandom = SecureRandom.getInstance(“SHA1PRNG”);
    secureRandom.setSeed(password.getBytes());
    kgen.init(128, secureRandom);
    原因:
    SecureRandom 实现完全随操作系统本身的内部状态,除非调用方在调用 getInstance 方法之后又调用了 setSeed 方法;该实现在 windows 上每次生成的 key 都相同,但是在 solaris 或部分 linux 系统上则不同。
    求历史数据怎么解出来的办法

    key:592530d4UIXQHd
    密文:4C5E7F38C5C0884785E4A78B466406FD9C9269E5D786FDAD62E1F6FE93E24EEDD8A7F23F5418F9D9CAD951F924BF64FC3F567442410039C4772BBDF56AD0D1E036C77D41B8836F4D58E08D06D43A71299AC4A935B52DB003251A00A65BBF33330663D43B084A3EB8FF533EF888740C500F80CE17397FCAFC8246E04F4AE5F0A0C7662E11D6044B2C2846F757E5F6F4EA2CC0C1669CDE605C3EB40A56F3B225095EF528D401893B611C1C785B335D8A98A5D33A1FA5236A29270C7CB5EFCEEDC1F313C001CA43627FD6865780DF53D2CB

    展开全文
  • 之前的做了一个外包项目,里边有一些敏感的信息需要AES加密,但是同样的代码在服务器就可以加密解密,在android系统中就解密失败,会出现pad block corrupted错误,下面给出解决方案, 亲测无问题! AES.java ...
  • 今天在写使用AES加密解密时出现了一个很郁闷的问题,找了很久才找到原因所在。特意在这里记录一下。 下面是错误的具体示例: 在使用AES在后台对前端传过来的参数进行解密时,使用AES工具类的AESUtils.decr();方法并...
  • 解决Linux下AES解密失败

    万次阅读 2015-07-21 22:44:23
    将加密过程放在安卓上,解密发布到Linux服务器的时候,安卓将加密的结果传到Linux上解密的时候却总是失败,让用户不能成功登录,经过检查,测试后,发现AES在Linux上解密失败,出现错误:  javax.crypto....
  • AES解密,key长度不够16处理

    千次阅读 2020-04-10 11:04:18
    AES解密,有时会遇到key长度不够16位的场景,如何处理,如下以AES-128-ECB解密模式为例进行展示。 public class Test { public static void main(String[] args) throws Exception { String str=...
  • 微信开发-aes解密失败

    千次阅读 2019-12-12 17:09:55
    错误信息:解密微信回掉消息出现aes解密失败 排查问题:因为是微服务,客户收到消息会出现接受微信会存在扫码有消息接受有,一会没有消息推送 于是排查问题 1.首先查看日志,具体看是什么问题,每台服务器都查看日志...
  • AES 128/192/256位CBC/CFB/ECB/OFB/PCBC 在线加密解密 解密内容:1243CFEBD819AA6B1C717DE870459F7B ...AES解密异常Given final block not properly padded javax.crypto.BadPaddingExceptio...
  • 自己尝试使用aes的cbc模式加密字符串,并解密字符串,并在最后使用OpenSSl自带的获取错误消息函数,获取错误信息,显示在加密和解密的过程中没有报错,但是将最后的明文结果输出,得到的始终是乱码啊。下面为自己写...
  • 支付宝小程序端,获取到加密的用户手机号数据,需要经过服务端对数据进行解密,得到用户的手机号 问题 用户信息为敏感信息,需要用到敏感信息加密解密方法中的方式进行解密 服务端为PHP,由于官方没有对应的演示demo...
  • AES解密错误提示: javax.crypto.BadPaddingException: pad block corrupted at org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher$BufferedGenericBlockCipher.doFinal(Unknown Source) at ...
  • 实现AES的加密解密功能,加密可以正常进行解密时红色地方的语句会出现异常。 如果算法用的DES就没这个问题,请问这个异常怎么解决,微软官方上都没解决方案,国外一些提问网站也没解决。不知道谁能告诉我怎么做 //...
  • AES 在 Linux 下解密错误

    千次阅读 2017-04-26 23:51:20
    javax.crypto.BadPaddingException:Given final block not properly padded。 解决方法 ...KeyGenerator kgen = KeyGenerator.getInstance( "AES" ...以上方法在Windows下可以...JAVA AES解密在linux中的问题
  • AES 解密乱码问题

    2017-07-07 11:29:00
    最近在搞文件加密,采用AES加密,目前存在一些问题,描述如下: 需将加密后的文件保存为文本,但是下次再读取文本,解密, 有部分数据解密正确, 但是有部分解密错误, 还有一部分乱码, 这我很不能理解,请大神们...
  • 微信退款回调AES解密

    2018-02-05 00:45:11
    根据u010660575大佬的博客改的,附上了MD5和BASE64工具类
  • 让我写个AES解密,可以解密他的文件。 作为一个代码的搬运工,这种问题难不倒我,百度一下我就知道(不要鄙视我不用google)。 看到结果我傻眼了:搜索到的结果基本都是对着写python加解密和java加解密,这些内容...
  • 将项目部署到测试环境执行同样的操作,系统报错,错误异常:aes解密失败。。。。。  调试……寻找问题……寻找问题……寻找问题……寻找问题……寻找问题……  两个小时过去了,问题还是没解决……  寻找问题...
  • AES解密失败处理方案

    2018-08-28 10:00:00
    解决方案如下: 处理办法: 在官方网站下载JCE无限制权限策略文件 JDK7的下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html JDK8的下载地址: ...
  • 一、前言     近期在处理http请求的时候接触到了有关加密解密的部分,因为之前几乎没碰过这方面,遇到了很多坑,所以记录一下...二、base64加密解密 2.1 base64编码     ...
  • java 使用javax.crypto包下的工具进行加解密 java的aes解密需要配置好工作模式和填充方式 java的PKCS5Padding填充方式 与 js中的 padding: CryptoJS.pad.Pkcs7 可以理解为同一种填充方式 // 加解密算法/工作模式/...
  • 我用了AES加密,按照规范操作了代码,但是解密出来总是前面有一部分不一致,但是后面的是一样的。如图: 文件原本内容 解密内容: btw,crypto库的aes,同一个对象不能既做加密又做解密的。 问题代码 我加密&...
  • AES 加密 解密

    2017-03-24 14:47:02
    javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec;... * AES Coder<br/> * secret key length: 128bit, default: 128 bit<br/> * mode: ECB/CBC/PCBC/CTR/

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,184
精华内容 4,873
关键字:

aes解密错误