未验证 提交 f207d003 编写于 作者: T Tsln 提交者: GitHub

bugfix: #627 (#634)

Emmm...解密是没有长度限制的
上级 19214fd5
...@@ -81,7 +81,7 @@ public class RsaUtils { ...@@ -81,7 +81,7 @@ public class RsaUtils {
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec); PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
Cipher cipher = Cipher.getInstance("RSA"); Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, publicKey); cipher.init(Cipher.DECRYPT_MODE, publicKey);
byte[] result = doLongerCipherFinal(cipher, Base64.decodeBase64(text)); byte[] result = doLongerCipherFinal(Cipher.DECRYPT_MODE, cipher, Base64.decodeBase64(text));
return new String(result); return new String(result);
} }
...@@ -99,7 +99,7 @@ public class RsaUtils { ...@@ -99,7 +99,7 @@ public class RsaUtils {
PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec); PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
Cipher cipher = Cipher.getInstance("RSA"); Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, privateKey); cipher.init(Cipher.ENCRYPT_MODE, privateKey);
byte[] result = doLongerCipherFinal(cipher, text.getBytes()); byte[] result = doLongerCipherFinal(Cipher.ENCRYPT_MODE, cipher, text.getBytes());
return Base64.encodeBase64String(result); return Base64.encodeBase64String(result);
} }
...@@ -117,7 +117,7 @@ public class RsaUtils { ...@@ -117,7 +117,7 @@ public class RsaUtils {
PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec5); PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec5);
Cipher cipher = Cipher.getInstance("RSA"); Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey); cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] result = doLongerCipherFinal(cipher, Base64.decodeBase64(text)); byte[] result = doLongerCipherFinal(Cipher.DECRYPT_MODE, cipher, Base64.decodeBase64(text));
return new String(result); return new String(result);
} }
...@@ -134,18 +134,22 @@ public class RsaUtils { ...@@ -134,18 +134,22 @@ public class RsaUtils {
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec2); PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec2);
Cipher cipher = Cipher.getInstance("RSA"); Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey); cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] result = doLongerCipherFinal(cipher, text.getBytes()); byte[] result = doLongerCipherFinal(Cipher.ENCRYPT_MODE, cipher, text.getBytes());
return Base64.encodeBase64String(result); return Base64.encodeBase64String(result);
} }
private static byte[] doLongerCipherFinal(Cipher cipher, byte[] source) throws Exception { private static byte[] doLongerCipherFinal(int opMode,Cipher cipher, byte[] source) throws Exception {
int offset = 0;
int totalSize = source.length;
ByteArrayOutputStream out = new ByteArrayOutputStream(); ByteArrayOutputStream out = new ByteArrayOutputStream();
while (totalSize - offset > 0) { if (opMode == Cipher.DECRYPT_MODE) {
int size = Math.min(1024 / 8 - 11, totalSize - offset); out.write(cipher.doFinal(source));
out.write(cipher.doFinal(source, offset, size)); } else {
offset += size; int offset = 0;
int totalSize = source.length;
while (totalSize - offset > 0) {
int size = Math.min(cipher.getOutputSize(0) - 11, totalSize - offset);
out.write(cipher.doFinal(source, offset, size));
offset += size;
}
} }
out.close(); out.close();
return out.toByteArray(); return out.toByteArray();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册