通过添加系统属性hutool.crypto.decodeHex强制关闭hex识别以解决hex和Base64歧义问题

This commit is contained in:
Looly
2024-02-10 08:37:15 +08:00
parent 6accf8fca0
commit e948273f2d
26 changed files with 169 additions and 158 deletions

View File

@@ -12,7 +12,7 @@
package org.dromara.hutool.crypto.asymmetric;
import org.dromara.hutool.core.codec.HexUtil;
import org.dromara.hutool.core.codec.binary.HexUtil;
import org.dromara.hutool.core.codec.binary.Base64;
import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.core.array.ArrayUtil;
@@ -190,7 +190,7 @@ public class RSATest {
+ "75F36564BA1DABAA20F3B90FD39315C30E68FE8A1803B36C29029B23EB612C06ACF3A34BE815074F5EB5AA3A"//
+ "C0C8832EC42DA725B4E1C38EF4EA1B85904F8B10B2D62EA782B813229F9090E6F7394E42E6F44494BB8";
final byte[] aByte = HexUtil.decodeHex(a);
final byte[] aByte = HexUtil.decode(a);
final byte[] decrypt = rsa.decrypt(aByte, KeyType.PrivateKey);
Assertions.assertEquals("虎头闯杭州,多抬头看天,切勿只管种地", StrUtil.str(decrypt, CharsetUtil.UTF_8));
@@ -212,7 +212,7 @@ public class RSATest {
//jdk原生加密
final Cipher cipher = Cipher.getInstance("RSA/ECB/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
final String result1 = HexUtil.encodeHexStr(cipher.doFinal(finalData));
final String result1 = HexUtil.encodeStr(cipher.doFinal(finalData));
//hutool加密
final RSA rsa = new RSA("RSA/ECB/NoPadding", null, publicKeyStr);

View File

@@ -12,7 +12,7 @@
package org.dromara.hutool.crypto.asymmetric;
import org.dromara.hutool.core.codec.HexUtil;
import org.dromara.hutool.core.codec.binary.HexUtil;
import org.dromara.hutool.core.codec.binary.Base64;
import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.core.util.ByteUtil;
@@ -53,8 +53,8 @@ public class SM2Test {
// OBJECT IDENTIFIER 1.2.156.10197.1.301
final String OID = "06082A811CCF5501822D";
final KeyPair pair = KeyUtil.generateKeyPair("SM2");
Assertions.assertTrue(HexUtil.encodeHexStr(pair.getPrivate().getEncoded()).toUpperCase().contains(OID));
Assertions.assertTrue(HexUtil.encodeHexStr(pair.getPublic().getEncoded()).toUpperCase().contains(OID));
Assertions.assertTrue(HexUtil.encodeStr(pair.getPrivate().getEncoded()).toUpperCase().contains(OID));
Assertions.assertTrue(HexUtil.encodeStr(pair.getPublic().getEncoded()).toUpperCase().contains(OID));
}
@Test
@@ -140,7 +140,7 @@ public class SM2Test {
final SM2 sm2 = new SM2(null, publicKeyHex);
sm2.usePlainEncoding();
final boolean verify = sm2.verify(dataBytes, HexUtil.decodeHex(signHex));
final boolean verify = sm2.verify(dataBytes, HexUtil.decode(signHex));
Assertions.assertTrue(verify);
}
@@ -161,8 +161,8 @@ public class SM2Test {
final SM2 sm2 = SmUtil.sm2();
final String sign = sm2.signHex(HexUtil.encodeHexStr(content));
final boolean verify = sm2.verifyHex(HexUtil.encodeHexStr(content), sign);
final String sign = sm2.signHex(HexUtil.encodeStr(content));
final boolean verify = sm2.verifyHex(HexUtil.encodeStr(content), sign);
Assertions.assertTrue(verify);
}
@@ -186,8 +186,8 @@ public class SM2Test {
final KeyPair pair = KeyUtil.generateKeyPair("SM2");
final SM2 sm2 = new SM2(//
HexUtil.encodeHexStr(pair.getPrivate().getEncoded()), //
HexUtil.encodeHexStr(pair.getPublic().getEncoded())//
HexUtil.encodeStr(pair.getPrivate().getEncoded()), //
HexUtil.encodeStr(pair.getPublic().getEncoded())//
);
final byte[] sign = sm2.sign(content.getBytes(StandardCharsets.UTF_8));
@@ -200,12 +200,12 @@ public class SM2Test {
final KeyPair pair = KeyUtil.generateKeyPair("SM2");
final PublicKey publicKey = pair.getPublic();
final byte[] data = KeyUtil.encodeECPublicKey(publicKey);
final String encodeHex = HexUtil.encodeHexStr(data);
final String encodeHex = HexUtil.encodeStr(data);
final String encodeB64 = Base64.encode(data);
final PublicKey Hexdecode = KeyUtil.decodeECPoint(encodeHex, SmUtil.SM2_CURVE_NAME);
final PublicKey B64decode = KeyUtil.decodeECPoint(encodeB64, SmUtil.SM2_CURVE_NAME);
Assertions.assertEquals(HexUtil.encodeHexStr(publicKey.getEncoded()), HexUtil.encodeHexStr(Hexdecode.getEncoded()));
Assertions.assertEquals(HexUtil.encodeHexStr(publicKey.getEncoded()), HexUtil.encodeHexStr(B64decode.getEncoded()));
Assertions.assertEquals(HexUtil.encodeStr(publicKey.getEncoded()), HexUtil.encodeStr(Hexdecode.getEncoded()));
Assertions.assertEquals(HexUtil.encodeStr(publicKey.getEncoded()), HexUtil.encodeStr(B64decode.getEncoded()));
}
@Test

View File

@@ -13,7 +13,7 @@
package org.dromara.hutool.crypto.symmetric;
import org.dromara.hutool.core.codec.binary.Base64;
import org.dromara.hutool.core.codec.HexUtil;
import org.dromara.hutool.core.codec.binary.HexUtil;
import org.dromara.hutool.core.util.RandomUtil;
import org.dromara.hutool.crypto.KeyUtil;
import org.dromara.hutool.crypto.Mode;
@@ -77,22 +77,22 @@ public class AESTest {
public void encryptPKCS7Test2() {
// 构建
final AES aes = new AES(Mode.ECB.name(), "pkcs7padding",
HexUtil.decodeHex("0102030405060708090a0b0c0d0e0f10"));
HexUtil.decode("0102030405060708090a0b0c0d0e0f10"));
// ------------------------------------------------------------------------
// 加密数据为16进制字符串
final String encryptHex = aes.encryptHex(HexUtil.decodeHex("16c5"));
final String encryptHex = aes.encryptHex(HexUtil.decode("16c5"));
// 加密后的Hex
Assertions.assertEquals("25869eb3ff227d9e34b3512d3c3c92ed", encryptHex);
// 加密数据为16进制字符串
final String encryptHex2 = aes.encryptBase64(HexUtil.decodeHex("16c5"));
final String encryptHex2 = aes.encryptBase64(HexUtil.decode("16c5"));
// 加密后的Base64
Assertions.assertEquals("JYaes/8ifZ40s1EtPDyS7Q==", encryptHex2);
// 解密
Assertions.assertEquals("16c5", HexUtil.encodeHexStr(aes.decrypt("25869eb3ff227d9e34b3512d3c3c92ed")));
Assertions.assertEquals("16c5", HexUtil.encodeHexStr(aes.decrypt(HexUtil.encodeHexStr(Base64.decode("JYaes/8ifZ40s1EtPDyS7Q==")))));
Assertions.assertEquals("16c5", HexUtil.encodeStr(aes.decrypt("25869eb3ff227d9e34b3512d3c3c92ed")));
Assertions.assertEquals("16c5", HexUtil.encodeStr(aes.decrypt(HexUtil.encodeStr(Base64.decode("JYaes/8ifZ40s1EtPDyS7Q==")))));
// ------------------------------------------------------------------------
// ------------------------------------------------------------------------