题目描述

我用JAVA在實行解密,參考了c#的範例,加密沒有問題 KEY和IV都是相同的

题目来源及自己的思路

相关代码

JAVA的代碼public static String decrypt(String hashKey, String hashIv, String value) {

try {

SecretKeySpec skeySpec = new SecretKeySpec(hashKey.getBytes("UTF-8"), "AES");

IvParameterSpec iv = new IvParameterSpec(hashIv.getBytes("UTF-8"));

Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");

cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);

byte[] encrypted = cipher.doFinal(RemovePKCS7Padding(HexToBytes(value)));

return new String(Base64.encodeBase64(encrypted), "UTF-8");

} catch (Exception e) {

System.out.println(e.getMessage());

}

return null;

}

private static byte[] RemovePKCS7Padding(byte[] data) {

int ilength = data[data.length - 1];

byte[] output = new byte[data.length - ilength];

System.arraycopy(data, 0, output, 0, output.length);

return output;

}

public static byte[] HexToBytes(String value) {

int hexStringLength = value.length();

byte[] b = new byte[hexStringLength / 2];

for (int i = 0; i < hexStringLength; i += 2) {

int topChar = (value.charAt(i) > 0x40 ? value.charAt(i) - 0x37 : value.charAt(i) - 0x30) << 4;

int bottomChar = value.charAt(i + 1) > 0x40 ? value.charAt(i + 1) - 0x37 : value.charAt(i + 1) - 0x30;

b[i / 2] = (byte) (topChar + bottomChar);

}

return b;

}

c#代碼public string DecryptAES256(string encryptData)//解密

{

string sSecretKey = "Xgmz5mMUm7JdpPI7mRXIITSNjPEUtV7f";

string iv = "nxKLik2dMNPUqIJy";

var encryptBytes = HexStringToByteArray(encryptData.ToUpper());

var aes = new RijndaelManaged();

aes.Key = Encoding.UTF8.GetBytes(sSecretKey);

aes.IV = Encoding.UTF8.GetBytes(iv);

aes.Mode = CipherMode.CBC;

aes.Padding = PaddingMode.None;

ICryptoTransform transform = aes.CreateDecryptor();

return Encoding.UTF8.GetString(RemovePKCS7Padding(transform.TransformFinalBl ock(e ncryptBytes, 0, encryptBytes.Length)));

}

private static byte[] RemovePKCS7Padding(byte[] data) {

int iLength = data[data.Length - 1];

var output = new byte[data.Length - iLength];

Buffer.BlockCopy(data, 0, output, 0, output.Length);

return output;

}

private static byte[] HexStringToByteArray(string hexString) {

int hexStringLength = hexString.Length;

byte[] b = new byte[hexStringLength / 2];

for (int i = 0; i < hexStringLength; i += 2) {

int topChar = (hexString[i] > 0x40 ? hexString[i] - 0x37 : hexString[i] - 0x30) << 4;

int bottomChar = hexString[i + 1] > 0x40 ? hexString[i + 1] - 0x37 : hexString[i + 1] - 0x30; b[i / 2] = Convert.ToByte(topChar + bottomChar);

}

return b;

}

你期待的结果是什么?实际看到的错误信息又是什么?

c#的沒問題,官方給的範例

Key : Xgmz5mMUm7JdpPI7mRXIITSNjPEUtV7f

IV : nxKLik2dMNPUqIJy

解密資料 : fb7a19d840c9877d26d961f6a906602439260588e0e9db45cdc0d4d69a3b97fe22e00fda051ee90c7e987e62a717d409a45e4c04893caa90b31f86dc32929debb391145325f07068854efb5977e9aed0b684e7b0a1cb45a764bad9f4d9ab32cb1f634c66e315054b2d3589a1d9fc0ad3dfdb8dad102df281c306c25972047d4e

正常結果為: MerchantID=MS15295340&RespondType=JSON&TimeStamp=1485232229&Version=1.4&MerchantOrderNo=S_1485232288&Amt=40&ItemDesc=UnitTest

出現此錯誤 Input length not multiple of 16 bytes

java aes 256 ecb解密_Java AES 256 解密相关推荐

  1. Python实现AES中ECB模式pkcs5padding填充加密/解密(需要加密文档中可以有中文)

    Python实现AES中ECB模式pkcs5padding填充加密/解密(需要加密文档中可以有中文) 一.本文主要解决的问题 二.完整版代码 结果: 三.遇到的问题 1.填充格式错误 2.传入类型错误 ...

  2. java aes128加密解密_java AES 128 位加密解密算法

    最近在做app后台的服务器,使用到AES加密解密算法,无奈网上的都不符合要求,于是自己借鉴着写了一个AES加密解密工具. 密钥长度问题 默认 Java 中仅支持 128 位密钥,当使用 256 位密钥 ...

  3. java 字符串加密 解密_java字符串加密解密

    java字符串加密解密 try { String test = "123456789@fdj.com"; EncryptionDecryption des = new Encryp ...

  4. java dsa加密与解密_Java DSA 加密 | 解密

    Java DSA 加密 | 解密 什么是DSA ? DSA (Digital Signature Algorithm) 是 Schnorr 和 ElGamal 签名算法的变种,被美国 NIST 作为 ...

  5. java 如何解密_java加密与解密

    1.下载:UnlimitedJCEPolicy 主要:获取权限文件 2.把解压后的 local_policy.jar US_export_policy.jar 复制到 这个目录中: C:\Progra ...

  6. java base64 加解密_java Base64加解密

    import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public class Base64Util { public stati ...

  7. java md5加密解密_java MD5加密解密 | 学步园

    package com.md5; /** * @author 作者 E-mail: chenshaohua2012@126.com * @version 创建时间:2012-11-6 下午3:29:4 ...

  8. aes 256 ecb 加解密 pkcs7补全 python JS

    python aes 256 ecb 加解密 功能 实现 Python ECB 256 JS版本 ECB 算法 JS版本 CBC 算法Pkcs7填充 SQL AES 在线验证网站 notice 功能 ...

  9. Go Nodejs Java Aes 128 ECB加密解密结果保持一致

    在多语言的生产环境下,常常是由一种语言进行加密而由另一种语言来进行解密,因此有必要保持各种语言之间加密解密算法的一致性.下面列出了Go,Nodejs,Java 的 Aes-128-Ecb的加密解密算法 ...

最新文章

  1. Python使用matplotlib函数subplot可视化多个不同颜色的折线图、使用set_minor_locator函数指定坐标轴次刻度数值倍数(MultipleLocator)
  2. 2021 年 7 月程序员工资统计,平均 15302 元
  3. PySide2安装出现Could not find a version that satisfies和No matching distribution found for
  4. iOS之一个iOS开发人员完整的学习路线
  5. spring4.2更好的应用事件
  6. Mysql常用语法总结
  7. bootstrap guide
  8. 贾扬清谈云原生-让数据湖加速迈入3.0时代
  9. 使用JSSDK分享页面
  10. ZYNQ PS端输出不准确时钟供PL使用
  11. Cheatsheet: 2015 03.01 ~ 03.31
  12. 裁员消息满天飞,我们整理了一份真实名单
  13. Android studio 六大基本布局详解
  14. 深入解析互联网协议的原理
  15. android 扫描动画效果图,RadarView之自定义雷达扫描动画效果。
  16. 排列组合常见公式集合
  17. python 查找excel标红的数据_excel表格如何快速给数据标红-如何将查找出的excel内容批量标记为红色?...
  18. cntv.cn今日“开锅” USB3.0初露端倪(每日关注2009.12.28)
  19. /hv/hv_go.h:14:27: fatal error: metslib/mets.hh: No such file or director解决办法
  20. 快问快答,MySQL面试夺命20问

热门文章

  1. newcoder错题集
  2. 使用NTP服务同步时间
  3. 数值计算——number-precision
  4. 02.Kubernetes 和 KubeSphere 集群安装配置持久化存储(nfs)并通过StatefulSet动态为pod生成pv挂载
  5. 全连接网络介绍(转载)
  6. 培训机构如何更好的发展成人教育
  7. 搭建邮件服务器,过程非常简单
  8. MATLAB算法实战应用案例精讲-【深度学习】多尺度特征提取(论文篇二)
  9. 实操教程|怎样制作目标检测的训练样本图像?
  10. 掌财社:期货市场波动加大 投资者关注度不断提升