diff --git a/CHANGELOG.md b/CHANGELOG.md index 3be945f6c..6be9ea2b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ ### 新特性 * 【extra 】 增加自动装配SpringUtil类(pr#1366@Github) * 【extra 】 ArrayUtil增加map方法重载 +* 【crypto 】 AsymmetricAlgorithm增加RSA_ECB("RSA/ECB/NoPadding")(issue#1368@Github) ### Bug修复 * 【core 】 修复FileUtil.move以及PathUtil.copy等无法自动创建父目录的问题(issue#I2CKTI@Gitee) diff --git a/hutool-crypto/src/main/java/cn/hutool/crypto/asymmetric/AsymmetricAlgorithm.java b/hutool-crypto/src/main/java/cn/hutool/crypto/asymmetric/AsymmetricAlgorithm.java index bcaf0585d..17b8bf876 100644 --- a/hutool-crypto/src/main/java/cn/hutool/crypto/asymmetric/AsymmetricAlgorithm.java +++ b/hutool-crypto/src/main/java/cn/hutool/crypto/asymmetric/AsymmetricAlgorithm.java @@ -12,6 +12,8 @@ public enum AsymmetricAlgorithm { RSA("RSA"), /** RSA算法,此算法用了默认补位方式为RSA/ECB/PKCS1Padding */ RSA_ECB_PKCS1("RSA/ECB/PKCS1Padding"), + /** RSA算法,此算法用了默认补位方式为RSA/ECB/NoPadding */ + RSA_ECB("RSA/ECB/NoPadding"), /** RSA算法,此算法用了RSA/None/NoPadding */ RSA_None("RSA/None/NoPadding"); diff --git a/hutool-crypto/src/test/java/cn/hutool/crypto/test/asymmetric/RSATest.java b/hutool-crypto/src/test/java/cn/hutool/crypto/test/asymmetric/RSATest.java index f8c309612..a3c8c1f57 100644 --- a/hutool-crypto/src/test/java/cn/hutool/crypto/test/asymmetric/RSATest.java +++ b/hutool-crypto/src/test/java/cn/hutool/crypto/test/asymmetric/RSATest.java @@ -8,6 +8,7 @@ import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.KeyUtil; import cn.hutool.crypto.SecureUtil; +import cn.hutool.crypto.asymmetric.AsymmetricAlgorithm; import cn.hutool.crypto.asymmetric.KeyType; import cn.hutool.crypto.asymmetric.RSA; import org.junit.Assert; @@ -73,6 +74,50 @@ public class RSATest { Assert.assertEquals("我是一段测试aaaa", StrUtil.str(decrypt2, CharsetUtil.CHARSET_UTF_8)); } + @Test + public void rsaECBTest() { + final RSA rsa = new RSA(AsymmetricAlgorithm.RSA_ECB.getValue()); + + // 获取私钥和公钥 + Assert.assertNotNull(rsa.getPrivateKey()); + Assert.assertNotNull(rsa.getPrivateKeyBase64()); + Assert.assertNotNull(rsa.getPublicKey()); + Assert.assertNotNull(rsa.getPrivateKeyBase64()); + + // 公钥加密,私钥解密 + byte[] encrypt = rsa.encrypt(StrUtil.bytes("我是一段测试aaaa", CharsetUtil.CHARSET_UTF_8), KeyType.PublicKey); + + byte[] decrypt = rsa.decrypt(encrypt, KeyType.PrivateKey); + Assert.assertEquals("我是一段测试aaaa", StrUtil.str(decrypt, CharsetUtil.CHARSET_UTF_8)); + + // 私钥加密,公钥解密 + byte[] encrypt2 = rsa.encrypt(StrUtil.bytes("我是一段测试aaaa", CharsetUtil.CHARSET_UTF_8), KeyType.PrivateKey); + byte[] decrypt2 = rsa.decrypt(encrypt2, KeyType.PublicKey); + Assert.assertEquals("我是一段测试aaaa", StrUtil.str(decrypt2, CharsetUtil.CHARSET_UTF_8)); + } + + @Test + public void rsaNoneTest() { + final RSA rsa = new RSA(AsymmetricAlgorithm.RSA_None.getValue()); + + // 获取私钥和公钥 + Assert.assertNotNull(rsa.getPrivateKey()); + Assert.assertNotNull(rsa.getPrivateKeyBase64()); + Assert.assertNotNull(rsa.getPublicKey()); + Assert.assertNotNull(rsa.getPrivateKeyBase64()); + + // 公钥加密,私钥解密 + byte[] encrypt = rsa.encrypt(StrUtil.bytes("我是一段测试aaaa", CharsetUtil.CHARSET_UTF_8), KeyType.PublicKey); + + byte[] decrypt = rsa.decrypt(encrypt, KeyType.PrivateKey); + Assert.assertEquals("我是一段测试aaaa", StrUtil.str(decrypt, CharsetUtil.CHARSET_UTF_8)); + + // 私钥加密,公钥解密 + byte[] encrypt2 = rsa.encrypt(StrUtil.bytes("我是一段测试aaaa", CharsetUtil.CHARSET_UTF_8), KeyType.PrivateKey); + byte[] decrypt2 = rsa.decrypt(encrypt2, KeyType.PublicKey); + Assert.assertEquals("我是一段测试aaaa", StrUtil.str(decrypt2, CharsetUtil.CHARSET_UTF_8)); + } + @Test public void rsaWithBlockTest2() { final RSA rsa = new RSA();