日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c blowfish java,blowfish-golang加密与java解密

發(fā)布時(shí)間:2025/3/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c blowfish java,blowfish-golang加密与java解密 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

無法解密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?3

根據(jù)輸出,golang中的加密和java中的解密不會(huì)產(chǎn)生相同的純文本。最初,認(rèn)為問題可能與base64編碼和解碼中涉及的golang字節(jié)(0到255)和java字節(jié)(-128到127)有關(guān)。但是插入Java的解密代碼,就可以正確地處理

value & 255

是的。

在果朗,解密同一個(gè)密碼文本工作得很好。同時(shí),java中的加密和解密也非常有效。但不是一個(gè)加密另一個(gè)解密。

我認(rèn)為加密和解密邏輯是正確的。只是猜測(cè)可能有一些特定的語言???在將密碼文本移植到其他語言進(jìn)行解密時(shí)丟失。

總結(jié)

以上是生活随笔為你收集整理的c blowfish java,blowfish-golang加密与java解密的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。