c blowfish java,blowfish-golang加密与java解密
无法解密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解密相关推荐
- 3des java ecb_PHP 3DES加密 与JAVA通用 加密模式:ECB
昨天帮同事解决了一个接口加密的算法,同事是个小姑娘,不懂,所以老大派我协助她,所以我为了不在姑凉面前掉面子~~火速解决它... 甲方是电信,JAVA写的接口,我一听头就大了,大家都知道~~PHP在加密 ...
- java对称加密,java异或加密,Java高性能对称加密
学过网络安全的可能知道加密可分为对称加密与非对称加密,比如大名鼎鼎的ssh.非对称加密有RSA,sm9等,对称加密有DES,sm4算法等,但是计算机基础比较扎实的可能知道一个值a与值b异或操作2次后可 ...
- java字符流 加密文件和解密文件
准备一个文本文件(非二进制),其中包含ASCII码的字符和中文字符. 设计一个方法 public static void encodeFile(File encodingFile, File enco ...
- 3des加密 java php_php 3des加密 兼容JAVA 多么痛的领悟呀
最近和别人做接口用到SOCKET TCP/IP方式 其中需要对账号和密码进行3DES加密 对方提供了一个加密比对的软件和JAVA的实现代码 并且给了我们一个长度为32位的密钥 这边需要用PHP来实现! ...
- java 异或加密 c语言解密,java对文件简单的加密解密(异或运算)
package xxx; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; i ...
- md5 java 实现_MD5加密的Java实现
在各种应用系统中,如果需要设置账户,那么就会涉及到储存用户账户信息的问题,为了保证所储存账户信息的安全,通常会采用MD5加密的方式来,进行储存.首先,简单得介绍一下,什么是MD5加密. MD5的全称是 ...
- 【Java基础】加密与安全基础
文章目录 一.编码算法 什么是编码? URL编码 1.什么是URL编码算法 2.Java中使用URL编码算法 Base64编码 1.什么是Base64编码算法 2.Java中使用Base64编码算法 ...
- 3des加密 java php_php 3DES加密如何兼容Java
Java源码: import java.security.Security; import javax.crypto.Cipher; import javax.crypto.SecretKey; im ...
- java 接口 安全加密_Java中的安全加密
java 接口 安全加密 上一次我写关于密码学的文章时 ,我概述了Apache Shiro加密API,并展示了如何使用其两个对称密码. 我还写道:"您不需要在应用程序中加密和解密敏感数据的更 ...
最新文章
- Maven build标签
- JavaScript(循环)
- 为什么用 windbg 看 !address 显示出的Free是128T 大小?
- 自动计算高度的方法 iOS, height为0, 可以自动计算weith,
- 从行业应用到智慧城市,升哲科技Alpha协议如何保障物理世界的数据传输
- 面包房算法 java_java处理买面包事件
- uva10256 凸包
- python错误集合
- JsonConfig处理日期时间
- Altium Designer(一):SCH
- 《Flutter 从0到1构建大前端应用》读后感—第5章【动画】
- ElementUI:tree给节点添加icon图标
- jquery Boxy的使用方法
- 非线性薛定谔方程_现有光纤网络正被推向极限,未来怎么办?薛定谔波动方程来帮忙...
- DongDong认亲戚
- easy-excel导出excel中日期列需要双击才能进行筛选
- 初学微信云开发,云函数实现两数相加
- 使用激光雷达创建地图
- 关于@NotNull和@NotBlank的问题
- 《大数据时代:生活、工作与思维的大变革》读书笔记3(完)
热门文章
- exchange2007配置发送、接收附件大小
- Java的数据类型的挑选
- 精选CSDN的ACM-ICPC五星博客
- 错误: libstdc++.so.6: cannot open shared object file: No such file or directory
- [每天一个知识点]1-程序员的三大美德(1)
- 计算机在课堂中的应用论文,任务教学法在计算机教学中的应用论文
- python学号怎么编写_用python编写学生管理系统
- 耳机不分主从是什么意思_强悍的配置,百元级的价格,Xisem西圣 Ares战神蓝牙耳机体验...
- 自由自在休闲食品意式手工冰淇淋 百变不离健康
- 【ABAP】 汇票收款自动过账FM