首页 > 编程语言 >c# AES 解密 快手店铺 java的AES加密方法

c# AES 解密 快手店铺 java的AES加密方法

时间:2023-11-20 14:36:26浏览次数:42  
标签:AES java String rijndaelCipher 快手 new byte message

JAVA版本的解密:

/**
 * 参数说明:
 * message:带解密的密文
 * privateKey: 加密密钥
 **/
String decodeMessage = PlatformEventSecurityUtil.decode(message, privateKey);

/**
 * 方法详情   
 **/ 
 private static final String CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding";
 private static final String KEY_ALGORITHM = "AES";
 private static final String CHARSET = "UTF-8";
 public static String decode(String message, String privateKey) throws KsMerchantApiException {
        try {
            if (KsStringUtils.isBlank(message) || KsStringUtils.isBlank(privateKey)) {
                throw new KsMerchantApiException("decode param is blank");
            }
            Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
            byte[] key = Base64.decodeBase64(privateKey);
            SecretKeySpec keySpec = new SecretKeySpec(key, KEY_ALGORITHM);
            cipher.init(Cipher.DECRYPT_MODE, keySpec, new IvParameterSpec(new byte[16]));
            return new String(cipher.doFinal(Base64.decodeBase64(message)), CHARSET);
        } catch (Exception e) {
            throw new KsMerchantApiException("decode message fail", e);
        }
    }

c#(.NET 6)解密

注意:JAVA初始向量是一个 new byte[16]全0的byte内容。所以C#也一样有这个向量参数,快手官方文档没有说明这点。

 public  string DecodeAES(string text, string key)
 {
     using Aes rijndaelCipher = Aes.Create();
     rijndaelCipher.Mode = CipherMode.CBC;
     rijndaelCipher.Padding = PaddingMode.None;
     rijndaelCipher.BlockSize = 128;
     byte[] pwdBytes = Convert.FromBase64String(key);
     byte[] ivBytes = new byte[16]; //初始向量是一个 new byte[16]全0的byte内容 。C#语言的解密执行逻辑可能需要和 java-sdk保持一致
     for (int i = 0; i < ivBytes.Length; i++)
     {
         ivBytes[i] = (byte)0;
     }
     byte[] encryptedData = Convert.FromBase64String(text);
   
     rijndaelCipher.Key = pwdBytes;
     rijndaelCipher.IV = ivBytes;
     ICryptoTransform transform = rijndaelCipher.CreateDecryptor();
     byte[] plainText = transform.TransformFinalBlock(encryptedData, 0, encryptedData.Length);
     return Encoding.UTF8.GetString(plainText);
 }

 

标签:AES,java,String,rijndaelCipher,快手,new,byte,message
From: https://www.cnblogs.com/wangjun8868/p/17843857.html

相关文章

  • 这才是java对象正解
    这才是Java对象正解 在深入讨论对象之前,让我们先明确对对象和实例的理解。什么是对象?对象(Object)是内存中分配的实际数据结构,它包含了数据和方法。在Java中,对象是类的一个实例,可以是具体类(例如Child)的实例,也可以是抽象类或接口的实现类的实例。对象是具体的实体,它具有特......
  • 什么是Java中的process_reaper线程?
     随着时间的推移,我在应用程序中获得了成百上千个这样的process_reaper线程。有人知道这些可能是什么吗?它们似乎是在我的Runtime.exec()中使用的,但是我在finally语句中销毁了我的进程,但它们仍然会出现屏幕截图:http://www.dropmocks.com/mBxM5Processproc=null;Str......
  • 掌握Java面向对象OOP篇(一)
    掌握面向对象OOP篇(一)边学边记--OOP(ObjectOrientatedPrograming)1.为什么要引入面向对象?原因:封装、继承、多态举个例子理解面向对象代码的好处:比如:我们有一个实际问题,假设现在一个宠物店有两只小狗,第一只叫做小白,年龄2岁,白色;第二只叫做小红,年龄3岁,红色;现在我们的宠物......
  • JAVA分批处理数据简单示例
    功能描述在处理业务时,经常遇到需要分批次处理数据的场景,例如有105条数据,每次推送20条,分批次推送最后不足20条数据时,一次性推送全部剩余数据DEMO示例packageshiguang.test;importjava.util.ArrayList;importjava.util.List;publicclassBatchProcessingExample{......
  • Java 学生管理系统
    需求:​ 采取控制台的方式去书写学生管理系统。分析:初始菜单:"-------------欢迎来到学生管理系统----------------""1:添加学生""2:删除学生""3:修改学生""4:查询学生""5:退出""请输入您的选择:"学生类:​ 属性:id、姓名、年龄、家庭住址添加功能:​ 键盘录入每一个学生信......
  • C++使用OpenSSL实现AES-256-CBC加密解密实例----亲测OK
    摘自:https://blog.csdn.net/GerZhouGengCheng/article/details/106103039//AesUtil.h#ifndef__AES_UTIL_H__#define__AES_UTIL_H__#ifdef__cplusplus//告诉编译器,这部分代码按C语言的格式进行编译,而不是C++的extern"C"{#endifstringUTIL_aes_cbc_e......
  • java数值前面补零
    Java数值前面补零在Java编程中,有时候我们需要对数字进行格式化,例如在输出时希望数字的前面补零。这在一些情况下是很有用的,比如显示日期、时间、序列号等。在本文中,我们将介绍几种方法来实现Java数值前面补零的操作,并提供相应的代码示例。使用String类的format方法Java中的String......
  • Java -day3
    四方法4.4命令行传递参数main方法也可以传递参数通过cmd命令提示符运行先编译注意包的位置(回退)publicclassDemo03{publicstaticvoidmain(String[]args){for(inti=0;i<args.length;i++){System.out.println(args[i]);......
  • java pdf数字签证(图片),根据关键字定位签证位置
    网上找了很多,最后还是结合了一下才能用。 用到的主要jar包:itextpdf-5.5.13.jar,bcprov-jdk15on-1.49.jar,bcpkix-jdk15on-1.50.jarmain测试:importjava.io.FileInputStream;importjava.io.FileOutputStream;importstaticweaver.interfaces.workflow.action.hrm.Test.PdfU......
  • [实验任务一]:JAVA和C++常见数据结构迭代器的使用
    信1305班共44名同学,每名同学都有姓名,学号和年龄等属性,分别使用JAVA内置迭代器和C++中标准模板库(STL)实现对同学信息的遍历,要求按照学号从小到大和从大到小两种次序输出学生信息。实验要求:1. 搜集并掌握JAVA和C++中常见的数据结构和迭代器的使用方法,例如,vector,list,map和set等......