Java AES 算法 如何转成golang

最近做了一个项目,我是用go +gin做的接口,需要用到跟第三方合作公司做接口对接,因为对方公司是用java springboot做的,他们提供额一个算法。如下。

private static String encryptData(String appKey, String appId, String content) throws Exception{
    byte[] byteContent = content.getBytes(StandardCharsets.UTF_8);
    SecretKeySpec secretKeySpec = new SecretKeySpec(appKey.getBytes(), "AES");
    IvParameterSpec ivParameterSpec = new IvParameterSpec(appId.getBytes());
    // 指定加密的算法、工作模式和填充方式
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);
    byte[] encryptedBytes = cipher.doFinal(byteContent);
    //对加密后数据进行 base64 编码
    return Base64.encodeBase64String(encryptedBytes);
}

因为最java不熟悉,一开始是就蒙了,于是乎,我就想如想它转换成go或者php,因为本人php程序员,所有就先想把其转换为php,经过半天的倒腾,结果写出来了,发现上面的方法,估计也是对方对方在网上找个加密方法。我的golang 方法如下

func getKeyBytes(key string) []byte {
	keyBytes := []byte(key)
	switch l := len(keyBytes); {
	case l < 16:
		keyBytes = append(keyBytes, make([]byte, 32-l)...)
	case l > 16:
		keyBytes = keyBytes[:32]
	}
	return keyBytes
}

func encrypt(appKey string, appId string, origData []byte) ([]byte, error) {
	keyBytes := getKeyBytes(appKey)
	block, err := aes.NewCipher(keyBytes)
	iv := getKeyBytes(appId)
	if err != nil {
		return nil, err
	}
	blockSize := block.BlockSize()
	origData = PKCS5Padding(origData, blockSize)
	blockMode := cipher.NewCBCEncrypter(block, iv)
	crypted := make([]byte, len(origData))
	blockMode.CryptBlocks(crypted, origData)
	return crypted, nil
}

希望对后面又需要的同学有所帮助

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值