java和golang对接AES解密问题

GO与Java的DES ECB加解密算法互换 Java默认DES算法使用DES/ECB/PKCS5Padding工作方式,在GO语言中因为ECB的脆弱性,DES的ECB模式是故意不放出来的,但实际情况中有时我们并不需要那么安全,以下代码完成与java默认DES算法的互通,为了能更好的与各种语言互通,建议在java中还是明确指明工作模式,如:DES/CBC/PKCS5Padding 阅读详情

和不同语言的第三方对接不可避免的遇到语言不一致的问题,比如AES的加解密

此次案例中Go和Java都是使用的AES128加密算法AES/ECB/PKCS5Padding,但是直接使用 golang 中的 AES ECB来进行加解密是有问题的,在java 中进行了 SHA1PRNG 处理数据是结果是对应不上的,在java中解密的时候会一直提示秘钥是坏的导致验签失败

解决办法

重新编写golang的编码(下面是源码)

1.加密方法

func (r *XRsa) SignSHA1withRSA(data string) (string, error) {
    // PrivateSign 生成私钥签名(SHA1withRSA)
    hash := sha1.Sum([]byte(data)) // 使用 SHA1 哈希算法
    encrypted, err := rsa.SignPKCS1v15(rand.Reader, r.PrivateKey, crypto.SHA1, hash[:])
    if err != nil {
       return "", err
    }
    signature := base64.StdEncoding.EncodeToString(encrypted)
    return signature, nil
}

2.解密方法

func DecryptByHex(encryptedHex, key string) (string, error) {
    keyBytes, err := base64.StdEncoding.DecodeString(key)
    if err != nil {
       return "", fmt.Errorf("无效的密钥,无法解码为 base64 字符串")
    }
    if len(keyBytes) != 16 { // AES-128的密钥长度应为16字节
       return "", fmt.Errorf("密钥长度无效,应为 16 字节")
    }

    encryptedBytes, err := hex.DecodeString(encryptedHex)
    if err != nil {
       return "", fmt.Errorf("无效的十六进制字符串,无法解码为字节数组")
    }

    block, err := aes.NewCipher(keyBytes)
    if err != nil {
       return "", err
    }

    decryptedBytes := make([]byte, len(encryptedBytes))
    for i := 0; i < len(encryptedBytes); i += aes.BlockSize {
       block.Decrypt(decryptedBytes[i:i+aes.BlockSize], encryptedBytes[i:i+aes.BlockSize])
    }

    decryptedBytes = PKCS5Unpadding(decryptedBytes)

    return string(decryptedBytes), nil
}

3.使用
在这里插入图片描述
4.PKSC5的封装

// PKCS5去填充
func PKCS5Unpadding(src []byte) []byte {
    length := len(src)
    unpadding := int(src[length-1])
    return src[:(length - unpadding)]
}
aes加解密 java与go、c语言互通 简介:java服务端负责解密go和c语言产生得加密数据,这里采用aes得ECB加密模式 java端得代码如下: package com.example.demo; import java.security.GeneralSecurityException; import java.util.Arrays; import java.util.Base64; import javax.cryp... 阅读详情

相关推荐

GO-使用golang解密使用php的openssl_encrypt加密的结果(AES-128-ECB)(包括加密原值大于16位的情况),以及关于和java通信时的一些说明

GO-使用golang解密使用php的openssl_encrypt加密的结果,以及关于和java通信时的一些说明 直接看源码 <?php $key = "1234567887654321"; var_dump(bin2hex(openssl_encrypt('1234','AES-128-ECB',$key,OPENSSL_RAW_DATA ))); 结果 4f87a3233278f5f9539ffd3b36b5ee37 go源码 func main() { key := []byte("12

a_lzq的博客 2914

aes使用java加密,go解密

java 加密 AESUtil.encrypt(s, pwd) go 解密 content, err := hex.DecodeString(message.Data) if err != nil { return nil, nil, err } tb, err := AesDecrypt(content, secret) if err != nil { return nil, nil, e...

fangdengfu123的博客 1935

【加解密】Java的AES默认加密模式

JAVA加解密 package file; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang.St

码农印象 4311

java 实现AES加解密后,与在线工具测试结果不一致

最近有个项目,因为参数里面带有sql可能是客户网关对参数做了防侵入,用简单的base64加密后居然还是不行,决定用AES加密。代码如下。 /** * 参数加密私钥 */ static final String paramPrivateKey="3dae12897b044f96"; 声明密钥 /** * 加密 * @param sSrc ...

u013811335的专栏 758

java,php,GOLang,JavaScript,AES加密解密代码互通

java,php,GOLang,JavaScript,多端代码,使用AES ECB 128加密解密内容互通,可以使用任意一种语言加密,使用另一种语言解密

JAVA与GO语言实现的RSA加密算法的互通

关键:(1)Java支持NoPadding填充方式,并且已经封装好相应的接口,可通过Cipher.getInstance来指定RSA/ECB/NoPadding该对齐和填充方式; (2)Golang中不支持NoPadding的填充方式,需要自己处理;

使用golang AES加密 java解密遇到的问题

前两天,准备写一个文件打标程序,设想的是使用golang在文件的末尾添加一串加密的内容,然后使用java读取文件中加密的内容并解密,为了安全使用的是AES加密。 代码部分golang:加密解密 package util import ( "crypto/aes" "crypto/cipher" "encoding/hex" "fmt" ) // 加密 func Encrypt(text string, key []byte) (string, error) { //密钥key只能为.

bannana119的博客 2305

RISC-V— 架构基础知识学习

蜂鸟 E200 系列是一个开源的RISC-V 处理器。蜂鸟 E200 系列由中国大陆研发团队开发,用户能够轻松与开发人员取得交流和支持。RI蜂鸟 E200 处理器研发团队拥有在国际一流公司多年开发处理器的经验,使用稳健的Verilog 2001 语法编写的可综合 RTL 代码,以工业级标准进行开发。蜂鸟 E200 的代码为人工编写,添加丰富的注释且可读性强,非常易于理解。

deilt 1万+

Java和go加密,解密,Base64失败

在客户端和go后台对接口的时候,加解密出现了问题记录。 问题主要出现在base64上,刚开始Android使用 import android.util.Base64; public class AesUtil { public static String encryptEcb(String content, String key) { if (TextUtils.isEmpty(content) || TextUtils.isEmpty(key)) return ""; try {

chenyingjie_Android的博客 2095

cesium 高程数据使用

cesium 高程数据使用高程数据下载高程数据切片简单数据服务 高程数据下载 使用地理空间数据云平台免费提供的高程数据。地理空间云平台 点击列表中的下载得到数据压缩包。例如:ASTGTM2_N22E114.zip 高程数据切片 使用cesium实验室工具对下载得到的压缩包进行切片。cesium实验室 切片得到的文件夹目录。 简单数据服务 使用nodejs的koa启动简单的资源服务。koajs 项目根目录新建data文件夹,在新建dem文件夹放高程数据。 注意目录自行更换,这里是./data/dem

哎哟这个凉白白的博客 1812

【scratch音乐课】天空之城:音符与节拍、消息与链表

scratch是一个非常小巧的青少年编程工具,自带程序编写语句,积木式语句非常直观、易用,可创作数学、科学、音乐、绘画等方面作品。本文用scratch“演奏”一首大家非常熟悉的《天空之城》,并向大家介绍一些基本乐理知识,以及scratch中消息、链表的使用。

★·°立芯;︶︵︶ 1万+

java与go对接AES-GCM加解密

java与go对接AES-GCM加解密

Fisher3652的博客 1739

【编译原理】LL(1)分析方法 生成语法树(c++实现)

基本流程 输入文法->消除左递归->提取左公共因子->求FIRST集->求FOLLOW集->LL(1)分析表->表驱动的预测语法分析过程->输出语法分析结果和语法树

qq_43417265的博客 1万+

Go语言解密上篇中用java aes实现的加密

上一篇java aes文件加解密中加密的梅须逊雪三分白,雪却输梅一段香。使用go语言解密。 解密代码如下: AESUtil.go package util import ( "crypto/cipher" "crypto/aes" "encoding/hex" "fmt" ) type Aes struct { } ...

anshenwa4859的博客 199

GD32H7 SPI驱动实战:手把手教你用SPI3连接外部Flash(W25Q128)并实现读写

本文详细介绍了基于GD32H7系列MCU的SPI3接口驱动W25Q128外部Flash的全流程开发指南。从硬件设计、引脚配置到SPI3外设深度配置,再到底层通信函数实现和高级功能优化,提供了完整的解决方案。特别针对高速读取、DMA传输和信号完整性等关键环节进行了优化,确保系统在-40℃~85℃范围内稳定工作。

weixin_28729205的博客 381

被搜狗输入法背刺了!偷偷装的 “AI 汪仔” 狂占 CPU!手把手教你如何彻底关闭删除搜狗AI功能AI汪仔

手把手教你如何彻底关闭删除搜狗输入法的AI汪仔🚀

XiaoqiangClub的博客 2万+

前后端对接,多语言实现 CryptoJS 的 AES 简单加密解密

在逆向某个网站接口时,发现的其参数使用了 CryptoJS 的 AES 简单加密,只需要两个参数,而在使用其他语言解密时却无法复现折腾了好久,查阅了多篇文章,终于解决

soladuor 2018

从零开始跑通3DGS教程:(五)3DGS训练

本文介绍了在Docker环境中训练3DGS(3D Gaussian Splatting)的方法,属于《从零开始跑通3DGS教程》系列文章的第五部分。主要内容包括:Docker环境准备(基于pytorch/pytorch:1.13.1-cuda11.6-cudnn8-runtime镜像)、容器内conda环境配置(安装必要依赖和3DGS相关组件)、以及训练命令执行步骤。文章提供了详细的命令行操作流程,帮助读者快速搭建3DGS训练环境。适合在Linux系统、Nvidia GPU环境下使用,完整教程可参考系列文章

诺有缸的高飞鸟的博客 1755

关于java php go 中AES加解密秘钥长度问题

今天心血来曹,想用go把php中的一个小功能重写一下,但在解密aes加密的数据时碰到了个坑! php的mcrypt拓展(貌似php7.1版本以上不支持了)提供了aes的加解密: 而且php aes 的秘要长度不仅仅 128 192 256 规定的这三种长度。只要不超过256都行。 所以php的加密秘钥传了个23*8=184。不知道当时的前辈是咋想的!!! 但是到go语言"crypto/...

weixin_30437847的博客 410

如何对正射影像DOM(卫星影像、无人机航拍影像)进行拼接、合并以及去黑边(附 Global Mapper Pro 24.0 安装包(中文注册版))

为什么要对正射影像DOM进行拼接?影像去黑边、影像拼接的操作和步骤。

从地图看世界的专栏 4300

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Go重构Java数据加密方法(AES/ECB/PKCS7,AES/CBC加密)

最近和合作厂商对接的时候,数据需要加密传输,响应数据需要再解密获取,由于我司使用的是Golang,而合作商使用的是Java,所以加密方法需要重构. 直接上代码(utils.go) package libs import ( "bytes" "crypto/aes" "crypto/cipher" "crypto/hmac" "crypto/md5" "crypto/sha256.

B4ToB的博客 2291

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

lua java 加密解密_AES加解密多版本(GO、JAVA、Python)实现

[TOC]异构系统基于RESTful接口加解密环境:GO1.8/JDK1.8/Python2.7GO示例package commonimport ("crypto/aes""crypto/cipher""bytes""fmt""encoding/base64")var key = []byte("B31F2A75FBF94099")var iv = []byte("1234567890123456...

weixin_33347467的博客 1331

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

GO语言JAVA语言实现的AES/CFB/256位的加密解密例子

AES加密解密算法里面,最复杂的的就是CFB模式,因为CFB模式每次附加随机一个IV,造成同样的KEY,每次生成的加密串不一样。解密的时候要用到这个IV,IV附加在了加密好的数据里面,有的实现是把IV放数据的最后,有的是最面前,比如加密之后的数据是XXX,    则最终的数据是  16Bytes的IV+XXX或者是XXX+16Bytes的IV。package main import ( "cr

Langeldep的专栏 6610

golang java AES 加密 SHA1PRNG

前言 和不同语言的第三方对接不可避免的遇到语言不一致的问题,比如加解密,有关于 golang 的CBC/ECB/CFB 加密方法,这篇博客写的很全传送门-> 本文主要介绍 java AES 中出现的随机算法SHA1PRNG 生成key,在 golang 中的实现方法 描述 先来看 java 代码 // java 代码 // content:test123 // encryptKey:123456 // 加密结果为:668C826342B8703D86E8BBF404610499 pu...

Baby_lucy的博客 5087

java aes 填充模式_不带模式和填充来获取AES算法-JAVA与Golang的互通

重要:在Java中不带模式和填充来获取AES算法的时候,其默认使用AES/ECB/PKCS5Padding!!!1 Java的AES加解密如果把Cipher.getInstance("AES");中的"AES"换成"AES/ECB/PKCS5Padding",效果是一样的。1.1 加密操作/*** Description: 加密操作 ** @param data 待加密数据* @param key...

weixin_42503008的博客 667

golang杀死java_如何使用golang实现Java aes加密和解密?[暂停]

我刚开始学习golang,以下是java实现的aes加密和解密,如何使用Golang来实现?public static byte[] encrypt(String clear, String raw) {try {KeyGenerator kgen = KeyGenerator.getInstance("AES");SecureRandom sr = SecureRandom.getInstanc...

weixin_36393718的博客 384
上一篇: 【PHP与Java对接JSON不兼容问题】
下一篇: Docker配置mysql容器
轩*
博客等级 码龄6年 24粉丝 24原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

轩*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值