Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么';我的加密逻辑有什么问题?_Java_Android_Encryption_Aes - Fatal编程技术网

Java 什么';我的加密逻辑有什么问题?

Java 什么';我的加密逻辑有什么问题?,java,android,encryption,aes,Java,Android,Encryption,Aes,我原以为我的加密类已分类,但出现了一个问题 我的客户机/服务器模型很简单。客户端连接到服务器,发送消息队列中的任何消息,然后断开连接 发送的第一条消息是绝对正确的,但此后发送的任何消息都表明第一个块(字符串的前16个字符)是错误的。奇怪的是,所有其他的街区看起来都很好,这很奇怪,因为我是CBC 加密设置: encryptionAlgorithm = "AES"; encryptionBitCount = 256; encryptionMessageLength = 176; hashingAlg

我原以为我的加密类已分类,但出现了一个问题

我的客户机/服务器模型很简单。客户端连接到服务器,发送消息队列中的任何消息,然后断开连接

发送的第一条消息是绝对正确的,但此后发送的任何消息都表明第一个块(字符串的前16个字符)是错误的。奇怪的是,所有其他的街区看起来都很好,这很奇怪,因为我是CBC

加密设置:

encryptionAlgorithm = "AES";
encryptionBitCount = 256;
encryptionMessageLength = 176;
hashingAlgorithm = "PBEWithSHA256And256BitAES-CBC-BC";
hashingCount = //some number;
cipherTransformation = "AES/CBC/PKCS7Padding";
salt = //some bytes;
我的客户端逻辑如下所示:

  • 初始化密码通过:
    cipher.Init(cipher.ENCRYPT_模式,cipherInitKey)
  • 连接到服务器
每个消息都是消息队列

  • 通过以下方式生成IV并将其写入套接字:
    stream.write(cipher.getParameters().getParameterSpec(IvParameterSpec.class).getIV())
  • 通过:
    stream.write(cipher.doFinal(message)),生成对套接字的写密文
结束

  • 断开
我的服务器逻辑如下所示:

对于收到的每条消息

  • 从套接字读取IV(16字节)
  • 通过以下方式初始化密码:
    cipher.Init(cipher.DECRYPT_模式,密钥,新的IvParameterSpec(iv))
  • 从套接字读取消息(大小固定)。(176字节)
  • 通过
    cipher.doFinal(消息)
结束

奇怪的是,它在本地与java客户机和服务器完美配合。但当我把服务器放在VPS上,有一个andriod客户端时,它就坏了


更新:事实上,我可能在消息开始时收到了一个额外的块-进行更多的测试。

您可能在消息开始时收到了IV。您应该使用第一个字节作为IV,然后使用密钥和给定的IV进行解密。这是一种常见的技术,它将准确地显示您描述的问题。您甚至可以跳过第一个输出块,只需将以下块作为纯文本使用(尽管这称为hacking)。有一点是肯定的:如果您的第一个块是垃圾,那么prolbem就是IV。

您是以字符串还是字节数组的形式发送消息?如果是字符串,可能是编码问题?我以字节数组的形式发送。两边都用UTF-8编码和解码。事实上,可能是我在开始时得到了一个额外的块。IV是问题所在。我犯了一个很愚蠢的错误,把信息的长度弄错了。所以从第二次读取开始,我读取的IV实际上是前一条消息的16个字节的结尾。