无法解密Java中使用Blowfish在Golang中加密的密码文本。

加密

import (

"testing"

"golang.org/x/crypto/blowfish"

"github.com/andreburgaud/crypt2go/ecb"

"github.com/andreburgaud/crypt2go/padding"

"fmt"

"encoding/base64"

)

func TestEncrypt(t *testing.T) {

bytes := []byte("cap")

key := []byte("1c157d26e2db9a96a556e7614e1fbe36")

encByte := encrypt(bytes, key)

enc := base64.StdEncoding.EncodeToString(encByte)

fmt.Printf("ENC - %s\n", enc)

}

func encrypt(pt, key []byte) []byte {

block, err := blowfish.NewCipher(key)

if err != nil {

panic(err.Error())

}

mode := ecb.NewECBEncrypter(block)

padder := padding.NewPkcs5Padding()

pt, err = padder.Pad(pt) // padd last block of plaintext if block size less than block cipher size

if err != nil {

panic(err.Error())

}

ct := make([]byte, len(pt))

mode.CryptBlocks(ct, pt)

return ct

}

// Output

// ENC - AP9atM49v8o=

解密

import lombok.SneakyThrows;

import javax.crypto.Cipher;

import javax.crypto.spec.SecretKeySpec;

import static java.util.Base64.getDecoder;

import static java.util.Base64.getEncoder;

public class UserAuthenticationFilter {

public static void main(String[] args) throws Exception {

String key = "1c157d26e2db9a96a556e7614e1fbe36";

System.out.println(decrypt(getDecoder().decode("AP9atM49v8o="), key));

// encryption and decryption verification

// String plainText = "cap";

// String cipher = encrypt(plainText, key);

// String decrypted = decrypt(getDecoder().decode(enc), key);

// assert decrypted.equals(plainText);

}

@SneakyThrows

public static String encrypt(String plainText, String key) {

byte[] myKeyByte = hexToBytes(key);

SecretKeySpec skeySpec = new SecretKeySpec(myKeyByte, "Blowfish");

Cipher ecipher = Cipher.getInstance("Blowfish/ECB/PKCS5Padding");

ecipher.init(Cipher.ENCRYPT_MODE, skeySpec);

byte[] src = ecipher.doFinal(plainText.getBytes("ISO-8859-1"));

return getEncoder().encodeToString(src);

}

@SneakyThrows

public static String decrypt(byte[] cipherContent, String key) {

byte[] myKeyByte = hexToBytes(key);

SecretKeySpec skeySpec = new SecretKeySpec(myKeyByte, "Blowfish");

Cipher dcipher = Cipher.getInstance("Blowfish/ECB/NoPadding");

dcipher.init(2, skeySpec);

byte[] dcontent = dcipher.doFinal(cipherContent);

return (new String(dcontent, "ISO-8859-1")).trim();

}

private static byte[] hexToBytes(String str) {

if (str == null) {

return null;

} else if (str.length() < 2) {

return null;

} else {

int len = str.length() / 2;

byte[] buffer = new byte[len];

for(int i = 0; i < len; ++i) {

buffer[i] = (byte)Integer.parseInt(str.substring(i * 2, i * 2 + 2), 16);

}

return buffer;

}

}

}

// Output

// BY x³

根据输出,golang中的加密和java中的解密不会产生相同的纯文本。最初,认为问题可能与base64编码和解码中涉及的golang字节(0到255)和java字节(-128到127)有关。但是插入Java的解密代码,就可以正确地处理

value & 255

是的。

在果朗,解密同一个密码文本工作得很好。同时,java中的加密和解密也非常有效。但不是一个加密另一个解密。

我认为加密和解密逻辑是正确的。只是猜测可能有一些特定的语言???在将密码文本移植到其他语言进行解密时丢失。

c blowfish java,blowfish-golang加密与java解密相关推荐

  1. 3des java ecb_PHP 3DES加密 与JAVA通用 加密模式:ECB

    昨天帮同事解决了一个接口加密的算法,同事是个小姑娘,不懂,所以老大派我协助她,所以我为了不在姑凉面前掉面子~~火速解决它... 甲方是电信,JAVA写的接口,我一听头就大了,大家都知道~~PHP在加密 ...

  2. java对称加密,java异或加密,Java高性能对称加密

    学过网络安全的可能知道加密可分为对称加密与非对称加密,比如大名鼎鼎的ssh.非对称加密有RSA,sm9等,对称加密有DES,sm4算法等,但是计算机基础比较扎实的可能知道一个值a与值b异或操作2次后可 ...

  3. java字符流 加密文件和解密文件

    准备一个文本文件(非二进制),其中包含ASCII码的字符和中文字符. 设计一个方法 public static void encodeFile(File encodingFile, File enco ...

  4. 3des加密 java php_php 3des加密 兼容JAVA 多么痛的领悟呀

    最近和别人做接口用到SOCKET TCP/IP方式 其中需要对账号和密码进行3DES加密 对方提供了一个加密比对的软件和JAVA的实现代码 并且给了我们一个长度为32位的密钥 这边需要用PHP来实现! ...

  5. java 异或加密 c语言解密,java对文件简单的加密解密(异或运算)

    package xxx; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; i ...

  6. md5 java 实现_MD5加密的Java实现

    在各种应用系统中,如果需要设置账户,那么就会涉及到储存用户账户信息的问题,为了保证所储存账户信息的安全,通常会采用MD5加密的方式来,进行储存.首先,简单得介绍一下,什么是MD5加密. MD5的全称是 ...

  7. 【Java基础】加密与安全基础

    文章目录 一.编码算法 什么是编码? URL编码 1.什么是URL编码算法 2.Java中使用URL编码算法 Base64编码 1.什么是Base64编码算法 2.Java中使用Base64编码算法 ...

  8. 3des加密 java php_php 3DES加密如何兼容Java

    Java源码: import java.security.Security; import javax.crypto.Cipher; import javax.crypto.SecretKey; im ...

  9. java 接口 安全加密_Java中的安全加密

    java 接口 安全加密 上一次我写关于密码学的文章时 ,我概述了Apache Shiro加密API,并展示了如何使用其两个对称密码. 我还写道:"您不需要在应用程序中加密和解密敏感数据的更 ...

最新文章

  1. Maven build标签
  2. JavaScript(循环)
  3. 为什么用 windbg 看 !address 显示出的Free是128T 大小?
  4. 自动计算高度的方法 iOS, height为0, 可以自动计算weith,
  5. 从行业应用到智慧城市,升哲科技Alpha协议如何保障物理世界的数据传输
  6. 面包房算法 java_java处理买面包事件
  7. uva10256 凸包
  8. python错误集合
  9. JsonConfig处理日期时间
  10. Altium Designer(一):SCH
  11. 《Flutter 从0到1构建大前端应用》读后感—第5章【动画】
  12. ElementUI:tree给节点添加icon图标
  13. jquery Boxy的使用方法
  14. 非线性薛定谔方程_现有光纤网络正被推向极限,未来怎么办?薛定谔波动方程来帮忙...
  15. DongDong认亲戚
  16. easy-excel导出excel中日期列需要双击才能进行筛选
  17. 初学微信云开发,云函数实现两数相加
  18. 使用激光雷达创建地图
  19. 关于@NotNull和@NotBlank的问题
  20. 《大数据时代:生活、工作与思维的大变革》读书笔记3(完)

热门文章

  1. exchange2007配置发送、接收附件大小
  2. Java的数据类型的挑选
  3. 精选CSDN的ACM-ICPC五星博客
  4. 错误: libstdc++.so.6: cannot open shared object file: No such file or directory
  5. [每天一个知识点]1-程序员的三大美德(1)
  6. 计算机在课堂中的应用论文,任务教学法在计算机教学中的应用论文
  7. python学号怎么编写_用python编写学生管理系统
  8. 耳机不分主从是什么意思_强悍的配置,百元级的价格,Xisem西圣 Ares战神蓝牙耳机体验...
  9. 自由自在休闲食品意式手工冰淇淋 百变不离健康
  10. 【ABAP】 汇票收款自动过账FM