【发布时间】:2017-09-04 00:25:09
【问题描述】:
我有以下用 Golang 编写的 AES 加密函数。
func encrypt(key []byte, text string) string {
plaintext := []byte(text)
block, err := aes.NewCipher(key)
if err != nil {
panic(err)
}
ciphertext := make([]byte, aes.BlockSize+len(plaintext))
iv := ciphertext[:aes.BlockSize]
if _, err := io.ReadFull(rand.Reader, iv); err != nil {
panic(err)
}
stream := cipher.NewCFBEncrypter(block, iv)
stream.XORKeyStream(ciphertext[aes.BlockSize:], plaintext)
return base64.URLEncoding.EncodeToString(ciphertext)
}
我很难理解使用 Java 解密生成的文本的流程。任何帮助将不胜感激!
这是 Scala 代码,不知道有什么问题。
def decode(input:String) = {
val keyBytes = Hex.decodeHex("someKey".toCharArray)
val inputWithoutPadding = input.substring(0,input.size - 2)
val inputArr:Seq[Byte] = Hex.decodeHex(inputWithoutPadding.toCharArray)
val skSpec = new SecretKeySpec(keyBytes, "AES")
val iv = new IvParameterSpec(inputArr.slice(0,16).toArray)
val dataToDecrypt = inputArr.slice(16,inputArr.size)
val cipher = Cipher.getInstance("AES/CFB/NoPadding")
cipher.init(Cipher.DECRYPT_MODE, skSpec, iv)
cipher.doFinal(dataToDecrypt.toArray)
}
【问题讨论】:
-
在此处复制了您的代码:glot.io/snippets/een965dgb3 但仍然没有使 java 解决方案正常工作
-
Java 代码在哪里?请注意,CFB 模式用于流式上下文:
XORKeyStream。 -
@Ripul 你找到解决方案了吗?
标签: java scala encryption go aes