| 17 | import javax.crypto.spec.SecretKeySpec; |
| 18 | |
| 19 | public class Crypto { |
| 20 | |
| 21 | public static String md5(String src) { |
| 22 | return md5(src, "UTF-8"); |
| 23 | } |
| 24 | |
| 25 | public static String md5(String src, String charset) { |
| 26 | try { |
| 27 | MessageDigest md = MessageDigest.getInstance("MD5"); |
| 28 | byte[] messageDigest = md.digest(src.getBytes(charset)); |
| 29 | BigInteger no = new BigInteger(1, messageDigest); |
| 30 | StringBuilder sb = new StringBuilder(no.toString(16)); |
| 31 | while (sb.length() < 32) sb.insert(0, "0"); |
| 32 | return sb.toString().toLowerCase(); |
| 33 | } catch (Exception e) { |
| 34 | return ""; |
| 35 | } |
| 36 | } |
| 37 | |
| 38 | public static String CBC(String src, String KEY, String IV) { |
| 39 | try { |
| 40 | src = src.replace("\\", ""); |
| 41 | Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); |
| 42 | SecretKeySpec keySpec = new SecretKeySpec(KEY.getBytes(), "AES"); |
| 43 | AlgorithmParameterSpec paramSpec = new IvParameterSpec(IV.getBytes()); |
| 44 | cipher.init(Cipher.DECRYPT_MODE, keySpec, paramSpec); |
| 45 | byte[] decrypted = cipher.doFinal(Base64.decode(src, Base64.DEFAULT)); |
| 46 | return new String(decrypted); |
| 47 | } catch (Exception ignored) { |
| 48 | return ""; |
| 49 | } |
| 50 | } |
| 51 | |
| 52 | public static String aesEncrypt(String data, String key, String iv) throws Exception { |
| 53 | SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "AES"); |
| 54 | IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes(StandardCharsets.UTF_8)); |
| 55 | Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); |
| 56 | cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec); |
| 57 | byte[] encrypted = cipher.doFinal(data.getBytes(StandardCharsets.UTF_8)); |
| 58 | return Base64.encodeToString(encrypted, Base64.NO_PADDING); |
| 59 | } |
| 60 | |
| 61 | public static String rsaEncrypt(String data, String publicKeyPem) throws Exception { |
| 62 | String publicKeyPEM = publicKeyPem.replace("-----BEGIN PUBLIC KEY-----", "").replace("-----END PUBLIC KEY-----", "").replaceAll("\\s+", ""); |
| 63 | byte[] decoded = Base64.decode(publicKeyPEM, Base64.DEFAULT); |
| 64 | X509EncodedKeySpec spec = new X509EncodedKeySpec(decoded); |
| 65 | KeyFactory keyFactory = KeyFactory.getInstance("RSA"); |
| 66 | PublicKey publicKey = keyFactory.generatePublic(spec); |
| 67 | Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); |
| 68 | cipher.init(Cipher.ENCRYPT_MODE, publicKey); |
| 69 | byte[] encrypted = cipher.doFinal(data.getBytes(StandardCharsets.UTF_8)); |
| 70 | return Base64.encodeToString(encrypted, Base64.DEFAULT); |
| 71 | } |
| 72 | |
| 73 | public static String rsaDecrypt(String encryptedKey, String privateKeyPem) throws Exception { |
| 74 | String privateKeyPEM = privateKeyPem.replace("-----BEGIN PRIVATE KEY-----", "").replace("-----END PRIVATE KEY-----", "").replaceAll("\\s", ""); |
| 75 | byte[] privateKeyBytes = Base64.decode(privateKeyPEM, Base64.DEFAULT); |
| 76 | PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKeyBytes); |
nothing calls this directly
no outgoing calls
no test coverage detected