Java中的AES(128 / ECB / PKCS5)+ Base64(RFC 1521)加密以及Golang中的解密

时间:2017-04-14 15:57:55

标签: java go cryptography base64 aes

Java中的加密是通过导入javax.crypto.Cipher,sun.misc.BASE64Decoder,sun.misc.BASE64Encoder和javax / crypto / SecretKey。

我对这些算法进行了大量研究,以了解具体标准,以确保Java和Golang中的每一步都相同。

由于我无法解密来自java的加密数据,我试图看到与golang中加密和Java中加密的区别。 golang和Java的加密输出即使是相同的格式也是不同的(最后24位,"==")。

inputs: key: T3-Arghbegrgg455dfer4g==  
        text: 123456789012345  
output: golang: 07vl02WwI8dApjYI161TrQ==  
        java:   B9E8aoCd+fYQBkKbqCS3lA==  

请帮助找出差异背后的原因!谢谢!

使用

的java代码
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);

byte[] stringBytes = message.getBytes("UTF8");
byte[] raw = cipher.doFinal(stringBytes);

BASE64Encoder encoder = new BASE64Encoder();
String base64 = encoder.encode(raw);
return base64;

在Golang

block, err := aes.NewCipher(key)
if err != nil {
    return "",err
}
content := []byte(src)
ecb := NewECBEncrypter(block)
content = PKCS5Padding(content, block.BlockSize())
crypted := make([]byte, len(content))
ecb.CryptBlocks(crypted, content)
finalMsg := base64.StdEncoding.EncodeToString(crypted)
return finalMsg,nil

0 个答案:

没有答案