From 543bd0b45f19fe4c32ba4e1aa9fd5586bb27b351 Mon Sep 17 00:00:00 2001 From: neko <52202080+akiyamaneko@users.noreply.github.com> Date: Wed, 23 Sep 2020 00:06:54 +0800 Subject: [PATCH 1/4] =?UTF-8?q?RC4=E7=89=B9=E6=80=A7=E5=A2=9E=E5=BC=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/hutool/crypto/symmetric/RC4.java | 46 ++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/hutool-crypto/src/main/java/cn/hutool/crypto/symmetric/RC4.java b/hutool-crypto/src/main/java/cn/hutool/crypto/symmetric/RC4.java index 2cf2e477e..5219a4f0b 100644 --- a/hutool-crypto/src/main/java/cn/hutool/crypto/symmetric/RC4.java +++ b/hutool-crypto/src/main/java/cn/hutool/crypto/symmetric/RC4.java @@ -11,6 +11,7 @@ import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.HexUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.CryptoException; +import cn.hutool.crypto.SecureUtil; /** * RC4加密解密算法实现
@@ -97,6 +98,16 @@ public class RC4 implements Serializable { return HexUtil.encodeHexStr(encrypt(data, charset)); } + /** + * 加密,使用UTF-8编码 + * + * @param data 被加密的字符串 + * @return 加密后的Hex + */ + public String encryptHex(String data) { + return HexUtil.encodeHexStr(encrypt(data)); + } + /** * 加密 * @@ -109,6 +120,17 @@ public class RC4 implements Serializable { return Base64.encode(encrypt(data, charset)); } + + /** + * 加密,使用UTF-8编码 + * + * @param data 被加密的字符串 + * @return 加密后的Base64 + */ + public String encryptBase64(String data) { + return Base64.encode(encrypt(data)); + } + /** * 解密 * @@ -132,6 +154,28 @@ public class RC4 implements Serializable { return decrypt(message, CharsetUtil.CHARSET_UTF_8); } + /** + * 解密Hex(16进制)或Base64表示的字符串,使用默认编码UTF-8 + * + * @param message 消息 + * @return 明文 + */ + public String decrypt(String message) { + return decrypt(SecureUtil.decode(message)); + } + + /** + * 解密Hex(16进制)或Base64表示的字符串 + * + * @param message 明文 + * @param charset 解密后的charset + * @return 明文 + */ + public String decrypt(String message, Charset charset) { + return StrUtil.str(decrypt(message), charset); + } + + /** * 加密或解密指定值,调用此方法前需初始化密钥 * @@ -216,4 +260,4 @@ public class RC4 implements Serializable { sbox[j] = temp; } //----------------------------------------------------------------------------------------------------------------------- Private method end -} \ No newline at end of file +} From 4df1073e0158040f052a834c885dbb329f2a3b6a Mon Sep 17 00:00:00 2001 From: neko <52202080+akiyamaneko@users.noreply.github.com> Date: Wed, 23 Sep 2020 00:09:44 +0800 Subject: [PATCH 2/4] =?UTF-8?q?RC4=E7=89=B9=E6=80=A7=E5=A2=9E=E5=BC=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hutool/crypto/test/symmetric/RC4Test.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/hutool-crypto/src/test/java/cn/hutool/crypto/test/symmetric/RC4Test.java b/hutool-crypto/src/test/java/cn/hutool/crypto/test/symmetric/RC4Test.java index 7869edc6a..c54f09ef9 100644 --- a/hutool-crypto/src/test/java/cn/hutool/crypto/test/symmetric/RC4Test.java +++ b/hutool-crypto/src/test/java/cn/hutool/crypto/test/symmetric/RC4Test.java @@ -1,10 +1,14 @@ package cn.hutool.crypto.test.symmetric; +import cn.hutool.core.util.CharsetUtil; import org.junit.Assert; import org.junit.Test; import cn.hutool.crypto.symmetric.RC4; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; + public class RC4Test { @Test @@ -36,4 +40,35 @@ public class RC4Test { String msg2 = rc4.decrypt(crypt2); Assert.assertEquals(message2, msg2); } + + @Test + public void testDecryptWithHexMessage() { + String message = "这是第一个用来测试密文为十六进制字符串的消息!"; + String key = "生成一个密钥"; + RC4 rc4 = new RC4(key); + String encryptHex = rc4.encryptHex(message, CharsetUtil.CHARSET_UTF_8); + String msg = rc4.decrypt(encryptHex); + Assert.assertEquals(message, msg); + + String message2 = "这是第二个用来测试密文为十六进制字符串的消息!"; + String encryptHex2 = rc4.encryptHex(message2); + String msg2 = rc4.decrypt(encryptHex2); + Assert.assertEquals(message2, msg2); + } + + + @Test + public void testDecryptWithBase64Message() { + String message = "这是第一个用来测试密文为Base64编码的消息!"; + String key = "生成一个密钥"; + RC4 rc4 = new RC4(key); + String encryptHex = rc4.encryptBase64(message, CharsetUtil.CHARSET_UTF_8); + String msg = rc4.decrypt(encryptHex); + Assert.assertEquals(message, msg); + + String message2 = "这是第一个用来测试密文为Base64编码的消息!"; + String encryptHex2 = rc4.encryptBase64(message2); + String msg2 = rc4.decrypt(encryptHex2); + Assert.assertEquals(message2, msg2); + } } From 65528ef68d5264d50cb25b528307ec83636d1e22 Mon Sep 17 00:00:00 2001 From: neko <52202080+akiyamaneko@users.noreply.github.com> Date: Wed, 23 Sep 2020 00:28:30 +0800 Subject: [PATCH 3/4] =?UTF-8?q?RC4=E7=89=B9=E6=80=A7=E5=A2=9E=E5=BC=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/test/java/cn/hutool/crypto/test/symmetric/RC4Test.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/hutool-crypto/src/test/java/cn/hutool/crypto/test/symmetric/RC4Test.java b/hutool-crypto/src/test/java/cn/hutool/crypto/test/symmetric/RC4Test.java index c54f09ef9..bb9980bd5 100644 --- a/hutool-crypto/src/test/java/cn/hutool/crypto/test/symmetric/RC4Test.java +++ b/hutool-crypto/src/test/java/cn/hutool/crypto/test/symmetric/RC4Test.java @@ -6,9 +6,6 @@ import org.junit.Test; import cn.hutool.crypto.symmetric.RC4; -import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; - public class RC4Test { @Test From 010907b7df9f0383cc6d43d36a69072dd5d59395 Mon Sep 17 00:00:00 2001 From: neko <52202080+akiyamaneko@users.noreply.github.com> Date: Wed, 23 Sep 2020 00:28:49 +0800 Subject: [PATCH 4/4] =?UTF-8?q?RC4=E7=89=B9=E6=80=A7=E5=A2=9E=E5=BC=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit