Android RSA解密返回256块

时间:2015-01-19 17:11:53

标签: java android encryption cryptography rsa

根据我在网上看到的代码,我认为解密表示加密字符串的RSA 256字节块(2048位密钥)只会产生字符串的字节。我没有在Android上得到它 - 我得到一个256字节的块,其中字符串后跟空值(0)。这是正确的行为吗?

我的应用程序中的测试代码如下:

keyFactory = KeyFactory.getInstance("RSA", "BC");

pubKeySpec = new RSAPublicKeySpec(publicModulus,
                    publicExponent);
key = (RSAPublicKey) keyFactory
                    .generatePublic(pubKeySpec);

cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] bytes = "hello".getBytes("ISO-8859-1");
byte[] encrypted = cipher.doFinal(bytes);

pubKeySpec = new RSAPublicKeySpec(privateModulus,
                    privateExponent);
key = (RSAPublicKey) keyFactory
                    .generatePublic(pubKeySpec);

cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] utf8 = cipher.doFinal(encrypted);
String plainString = new String(utf8, "ISO-8859-1");

utf8作为长度为256的字节数组返回。" hello"占用前5个字节,其余为空,所以我的plainString不正确。如果我将cypher实例指定为" RSA / ECB / NoPadding"那么"你好"出现在前面带空值的256字节块的末尾。

我看到人们直接将字节数组转换为字符串,因为我已经完成了,显然他们正在获得正确的长度字符串。那我做错了什么?

0 个答案:

没有答案