如何在Mirth Connect中运行Bouncy Castle算法并转换对应Java代码为JS
Mirth可用的Bouncy Castle PGP加密JavaScript代码
前置准备
- 下载对应版本的Bouncy Castle依赖包:
bcprov-jdk15on、bcpg-jdk15on - 将两个jar包放入Mirth安装目录下的
custom-lib文件夹 - 重启Mirth服务使依赖生效
加密函数代码
// 导入依赖Java类 var ByteArrayOutputStream = java.io.ByteArrayOutputStream; var ArmoredOutputStream = org.bouncycastle.bcpg.ArmoredOutputStream; var PGPEncryptedDataGenerator = org.bouncycastle.openpgp.PGPEncryptedDataGenerator; var JcePGPDataEncryptorBuilder = org.bouncycastle.openpgp.operator.jcajce.JcePGPDataEncryptorBuilder; var SecureRandom = java.security.SecureRandom; var JcePBEKeyEncryptionMethodGenerator = org.bouncycastle.openpgp.operator.jcajce.JcePBEKeyEncryptionMethodGenerator; var Security = java.security.Security; var BouncyCastleProvider = org.bouncycastle.jce.provider.BouncyCastleProvider; // 注册BC加密提供者,全局仅需执行一次 Security.addProvider(new BouncyCastleProvider()); function encrypt(dataToEncrypt, passPhrase, algorithm, armor) { var bOut = new ByteArrayOutputStream(); var out = bOut; if (armor) { out = new ArmoredOutputStream(out); } var encGen = new PGPEncryptedDataGenerator( new JcePGPDataEncryptorBuilder(algorithm) .setSecureRandom(new SecureRandom()) .setProvider("BC") ); encGen.addMethod( new JcePBEKeyEncryptionMethodGenerator(passPhrase) .setProvider("BC") ); var encOut = encGen.open(out, dataToEncrypt.length); encOut.write(dataToEncrypt); encOut.close(); if (armor) { out.close(); } return bOut.toByteArray(); }
调用示例
// 待加密内容转UTF-8字节数组 var dataToEncrypt = new java.lang.String("测试加密内容").getBytes("UTF-8"); // 密码转char数组 var passArray = "你的加密密码".toCharArray(); // 调用加密方法,使用CAST5算法,开启ASCII装甲 var encryptedBytes = encrypt(dataToEncrypt, passArray, PGPEncryptedDataGenerator.CAST5, true); // 如需转可读字符串可执行以下代码 var encryptedStr = new java.lang.String(encryptedBytes, "UTF-8");
注意事项
- 加密后返回值为字节数组,若需要存储或传输可按需转为Base64编码或直接使用装甲格式的字符串
- 密码建议避免硬编码在代码中,可存入Mirth的配置映射表中读取使用
内容的提问来源于stack exchange,提问作者sgowd
相关产品推荐
相关产品推荐

