HISUI
加密服务部署说明
2026年04月27日 15时53分

加密服务部署说明

背景

JAVA加密服务部署,我们需要通过部署 JAR 包服务来实现此功能。

服务器要求

对于服务器硬件要求无特别限制,通常可以部署在 ECP 服务器上,也可以部署在其他可访问的内网服务器上。

1) Windows服务器:

  • 软件要求:JDK1.8

  • 端口要求:8087

  • JDK安装方式:附件jdk1.8.0_251.zip安装即可。

2) Linux服务器

部署说明

部署jar包服务

Windows服务器:

  1. 将附件中的 cryptographic-service-0.0.1-SNAPSHOT.jar 文件放置于 D 盘根目录。

http://hisui.cn/wp-content/uploads/2026/04/image1.png

  1. 进入 JDK 的 bin 目录,打开 CMD 命令行工具。

http://hisui.cn/wp-content/uploads/2026/04/image2.png

  1. 在命令行中执行以下命令启动服务:
  • java -jar d:\cryptographic-service-0.0.1-SNAPSHOT.jar &

若运行成功,会显示如下图所示的内容。

http://hisui.cn/wp-content/uploads/2026/04/image3.png

注意:关闭 shell 后服务将终止。

Linux服务器:

  1. 将 cryptographic-service-0.0.1-SNAPSHOT.jar 文件上传至 /dthealth/app/dthis/web/hisbase/bsp 目录。如果目录不存在,请先创建。

  2. 确保系统中已安装 JDK 1.8。若未安装,请参考上文中的链接进行安装,并使用附件中的 jdk-8u271-linux-x64.tar 进行安装。

    • Centos7安装jdk1.8 – https://blog.csdn.net/weixin_44571055/article/details/134647535
  3. 安装完成后,打开 shell 并执行以下命令启动服务:

java -jar /dthealth/app/dthis/web/hisbase/bsp/cryptographic-service-0.0.1-SNAPSHOT.jar

以下剩余步骤对测试接口的结果不产生影响,可以在接口调试成功后继续执行。可跳过此步骤继续进行3.2步骤:

  1. 为防止关闭 shell 后服务终止,请使用以下命令后台启动服务(该步骤可在接口调试成功后,在执行。)

nohup java -jar /dthealth/app/dthis/web/hisbase/bsp/cryptographic-service-0.0.1-SNAPSHOT.jar \> /tmp/javalog.txt 2\>&1 &

可以通过查看 /tmp/javalog.txt 日志来确认服务是否启动成功。如果关机或重启服务器,服务需要重新启动。

如果提示’nohup’命令不存在,请根据使用的Linux系统版本,自行查阅相关资料并安装’nohup’命令。

  1. 为确保系统重启后自动启动该服务,请执行以下步骤:

将附件中的 myjavaapp 文件放到 /etc/init.d/ 目录。(该步骤可在接口调试成功后,在执行。)

依次执行如下代码:

 使脚本可以执行  

sudo chmod +x /etc/init.d/myjavaapp  

将脚本添加为系统服务  

sudo chkconfig \--add myjavaapp  

启动服务  

sudo service myjavaapp start  

设置开机自动启动  

sudo chkconfig myjavaapp on  

查看/tmp/javalog.txt日志观察是否启动成功。

如下日志代表启用成功

注意:服务发布成功后,切勿关闭服务进程,否则接口调用将失败。

如果执行上述命令时提示错误,请根据Linux系统版本百度查找相关解决方法。

导入工具类

将附件中的加密工具类导入到需要验证的 Cache/IRIS 数据库中,如下图所示:

http://hisui.cn/wp-content/uploads/2026/04/image6.png

  1. 选中所有文件

  2. 选中编译导入项目

  3. 点击OK,如下图操作:

http://hisui.cn/wp-content/uploads/2026/04/image7.png

如果系统中存在上图中的类,直接覆盖更新。

导入成功后,Studio打开类文件 Util.Impl.EncryptionUtils,在第 885 行修改参数为发布 JAR 服务器的地址 IP,例如:

Parameter URL = "http://localhost:8087";  

将 Parameter URL = \”http://localhost:8087\”; 中的 localhost 修改为相应的服务器 IP,例如 192.168.1.1。修改后的示例如下:

Parameter URL = "http://192.168.1.1:8087";  

http://hisui.cn/wp-content/uploads/2026/04/image8.png

接口说明

在Cache/IRIS的Terminal中调试以下接口:

3DES算法

DesedeEcbPcks5加密算法

方法签名:

/// author:姚鑫
/// date:2025-07-11
/// version:1.0
/// desc:JAVA Desede ECB Pcks5 解密
/// params:plainText - 明文, keyStr - 密钥, keyType - 密钥类型(默认text), outputFormat - 输出格式(默认hex)
/// return:密文
/// call:w ##class(Util.EncryptionUtils).JavaDesedeEcbPcks5Encrypt("1ab姚鑫@#!","5fe300c90369642d3a15d234c0668f74")
ClassMethod JavaDesedeEcbPcks5Encrypt(plainText As %String, keyStr As %String, keyType As %String = "base64", outputFormat As %String = "base64", url As %String = {..#URL}) As %String

调用结果:

USER>w ##class(Util.EncryptionUtils).JavaDesedeEcbPcks5Encrypt("1ab姚鑫@#!","5f   e300c90369642d3a15d234c0668f74")
ZMb9ru7du2h4LfcEC/i4qA==

DesedeEcbPcks5解密算法

方法签名:

/// author:姚鑫
/// date:2025-07-11
/// version:1.0
/// desc:JAVA Desede ECB Pcks5 解密
/// params:cipherText - 密文, keyStr - 密钥, keyType - 密钥类型(默认text), outputFormat - 输出格式(默认hex)
/// return:明文
/// call:w ##class(Util.EncryptionUtils).JavaDesedeEcbPcks5Decrypt("ZMb9ru7du2h4LfcEC/i4qA==","5fe300c90369642d3a15d234c0668f74")
ClassMethod JavaDesedeEcbPcks5Decrypt(cipherText As %String, keyStr As %String, keyType As %String = "base64", outputFormat As %String = "base64", url As %String = {..#URL}) As %String

调用结果:

USER>w ##class(Util.EncryptionUtils).JavaDesedeEcbPcks5Decrypt("ZMb9ru7du2h4LfcEC/i4qA==","5fe300c90369642d3a15d234c0668f74")
1ab姚鑫@#!

DesedeCbcPkcs7加密算法

方法签名:

/// author:姚鑫
/// date:2025-09-03
/// version:1.0
/// desc:JAVA Desede CBC Pkcs7 加密
/// params:plainText - 明文, keyStr - 密钥, ivStr - 向量, keyType - 密钥类型, outputFormat - 输出格式
/// return:密文
/// call:w ##class(Util.EncryptionUtils).JavaDesedeCbcPkcs7Encrypt({"ScheduleOperatorID":"10999","ScheduleOperatorName":"陈医生","MedRecNO":"123","Timestamp":"1490415566"}.%ToJSON(),"eWorldTomTaw#7=*","TomTaw#7")
ClassMethod JavaDesedeCbcPkcs7Encrypt(plainText As %String, keyStr As %String, ivStr As %String, keyType As %String = "base64", outputFormat As %String = "base64", url As %String = {..#StandardAlgUrl}) As %String

调用结果:

USER>w ##class(Util.EncryptionUtils).JavaDesedeCbcPkcs7Encrypt({"ScheduleOperatorID":"10999","ScheduleOperatorName":"陈医生","MedRecNO":"123","Timestamp":"14904   15566"}.%ToJSON(),"eWorldTomTaw#7=*","TomTaw#7")
VcyCfRqZ2TOpXoC+qOzAjQJ1195tlaleBEjCie4u9RPvfhua37PGs2r8+1pJUCOmv/thVnUF2PP3K5z5fypx12lKnHHulxNlYi5rN194RDntjv9yEgh01UhkwZxvku4wosD1ECxMIXTMNt88EhipHA==

DesedeCbcPkcs7解密算法

方法签名:

/// author:姚鑫
/// date:2025-09-03
/// version:1.0
/// desc:JAVA Desede CBC Pkcs7 解密
/// params:cipherText - 密文, keyStr - 密钥, ivStr - 向量, keyType - 密钥类型, outputFormat - 输出格式
/// return:明文
/// call:w ##class(Util.EncryptionUtils).JavaDesedeCbcPkcs7Decrypt("VcyCfRqZ2TOpXoC+qOzAjQJ1195tlaleBEjCie4u9RPvfhua37PGs2r8+1pJUCOmv/thVnUF2PP3K5z5fypx12lKnHHulxNlYi5rN194RDntjv9yEgh01UhkwZxvku4wosD1ECxMIXTMNt88EhipHA==","eWorldTomTaw#7=*","TomTaw#7")
ClassMethod JavaDesedeCbcPkcs7Decrypt(cipherText As %String, keyStr As %String, ivStr As %String, keyType As %String = "base64", outputFormat As %String = "base64", url As %String = {..#StandardAlgUrl}) As %String

调用结果:

USER>w ##class(Util.EncryptionUtils).JavaDesedeCbcPkcs7Decrypt("VcyCfRqZ2TOpXoC+qOzAjQJ1195tlaleBEjCie4u9RPvfhua37PGs2r8+1pJUCOmv/thVnUF2PP3K5z5fypx12lKnHHulxNlYi5rN194RDntjv9yEgh01UhkwZxvku4wosD1ECxMIXTMNt88EhipHA==","eWorldTomTaw#7=*","TomTaw#7")
{"ScheduleOperatorID":"10999","ScheduleOperatorName":"陈医生","MedRecNO":"123","   Timestamp":"1490415566"}

DES算法

DesEcbPcks5加密算法

方法签名:

/// author:姚鑫
/// date:2025-07-28
/// version:1.0
/// desc:JAVA Des ECB Pkcs5 加密
/// params:plainText - 明文, keyStr - 密钥, keyType - 密钥类型(默认text), outputFormat - 输出格式(默认hex)
/// return:密文
/// call:w ##class(Util.EncryptionUtils).JavaDesEcbPkcs5Encrypt("1ab姚鑫@#!","MTIzNDU2Nzg=")

调用结果:

USER>w ##class(Util.EncryptionUtils).JavaDesEcbPkcs5Encrypt("1ab姚鑫@#!","MTIzN   DU2Nzg=")
Kvo+vm9pScNRllrCV8LMkA==

DesEcbPcks5解密算法

方法签名:

/// author:姚鑫
/// date:2025-07-28
/// version:1.0
/// desc:JAVA Des ECB Pkcs5 解密
/// params:cipherText - 密文, keyStr - 密钥, keyType - 密钥类型(默认text), outputFormat - 输出格式(默认hex)
/// return:明文
/// call:w ##class(Util.EncryptionUtils).JavaDesEcbPkcs5Decrypt("Kvo+vm9pScNRllrCV8LMkA==","MTIzNDU2Nzg=")

调用结果:

USER>w ##class(Util.EncryptionUtils).JavaDesEcbPkcs5Decrypt("Kvo+vm9pScNRllrCV8LMkA==","MTIzNDU2Nzg=")
1ab姚鑫@#!

RSA算法

SignBySha1WithRsa签名算法

方法签名:

/// author:姚鑫
/// date:2025-08-07
/// version:1.0
/// desc:JAVA SignBySha1WithRsa 签名
/// params:content - 签名内容, privateKey - 私钥, keyType - 密钥类型(默认base64), outputFormat - 输出格式(默认hex)
/// return:签名密文
/// call:w ##class(Util.EncryptionUtils).JavaSignBySha1WithRsa("1ab姚鑫@#!","MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCxoREOdwF3UC7jcaZlYt7GnwLyGI09xZsg1x6bCYR2fc0/NI6XA76dTYKCwcuROSROoHvJyZ1jeEpMZzq6h+GGO0gW4rlMnSjoymW2IXW7wwWLqHTLpjC5KqYiQwcvAU4eumCPVa3MApFdrm+hgvZfDrRlslldSAlZ0gYXJFJpaHg9TdPP+jD1mIyJ19/7YWycWp/cnPzt3tKQZLyihDVce/UeG84WV9OXrhz6R5SMfmCu2VgghKDj3dFpK8GzKFXKvBO9+gvfQOne6+kps3CfvB7ZTKRIpoqIA2VLhYOYBWXoIJoVtmzNHCGaiaGOB7FzJBsN1V5sViG3juReu2fBAgMBAAECggEBALFylBV9MUu+IHk6id3y3VZSd6DeggrZo1U1Ue/TnC67EhU4LdIS/ZMrYVu6ueAD049wpvk4njBGdQLKhVLed5+fDS8/o5kzzzBvMRi3aGQAOUQBL1xaU4ZHYtwLVdvRU/dCfT/zecG6Nvn9Tqtspy7jA7gsaTXUxvKh60+nC2UcOFa8NVAq30biByQ0ClXpG5+HAoJSyQuomWRW1Dm0uTfNzJOOzcp/TYgxzL9Pw9h589oIJiBf0o0EYVOKG4CznF4Gn7bjOPluDB3VGj3au1BYTGD71ksZsbmCf2lbbXVlAKPyZ6bfYtkV6wLXGLzNS0HkOkFR4PIlIspy2IoeZ/kCgYEA866HC3VyKQwowMeQsX1AHweMTxAEe4wsbWJiuha/Ii+qi/06NipjZUyYiquwTQJo/qkBqH7EIKEsWQvcoqkH1dlnzXM7RhYkscCe4DQv5MAr3C70vMhC+NVj6L9lz5GfNNXf6clT3zLvLFHDVKc5iX1fA6YeobndbVPQyna6t18CgYEAupvBlPboKUBG4S+SLUneYsuj0c6FtSqai/sSqEX2IOXUF3B2uwWz+aWDjbhMBPqunTMdW2+FmiaHRySzF8Vxrc2EDN5t6ROOZAG8c5wNgkYDD4nhUabRfTYjK5NkvQHkkZ4xuNdPVO0XkaxV3FXiwzacUr93Og7Eavk7AR6l1N8CgYBqpmjuZ/GV639umClItSO6MOiEteLwW7IaEaRaA5iVkr0W1baDfFvSOwrMLkZT/gkL49YY85pNGZ06P8nJ2ybVvngC4DsB+rEGpuIiCFUpzb2keVydvxwooeQ/On2Jshc23aBJRtcRac5p3EMcKrAw75EFHNBtQdaagcNwyTQBCwKBgQCxyv64mDqAOw6NNI7YeX3ZsV4m4tb/0lSnNBMFooqrs23M20k0TW25WJorp8E+KT2+5tl8qZeoVDclcHD2IBd8WcgLns0neYt7+y97Et7IFT6LSnoUGpWT78W4mdksP6Zvm0KScwnRx4diMskngejox5pPOL824KUBqu4t1e54DwKBgHyRXbFpDxo1ylqitmV7auGTDnoPprU8QFOeWLgCJvkDLLXjgXz21iQ2CmmWCvVgHrnPUaWT19Q9F1fnpslYaY4AIYaZgeejLo5QidmYga8FP3/npnx5WNS6cejx4qOebigWhDHZag34j9CWDrC8+l/WRlcBvFbONv2YKTxJof+5")
ClassMethod JavaSignBySha1WithRsa(content As %String, privateKey As %String, keyType As %String = "base64", outputFormat As %String = "hex") As %String

调用结果:

USER>w ##class(Util.EncryptionUtils).JavaSignBySha1WithRsa("1ab姚鑫@#!","MIIEvg   IBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCxoREOdwF3UC7jcaZlYt7GnwLyGI09xZsg1x6bCYR2fc0/NI6XA76dTYKCwcuROSROoHvJyZ1jeEpMZzq6h+GGO0gW4rlMnSjoymW2IXW7wwWLqHTLpjC5KqYiQwcvAU4eumCPVa3MApFdrm+hgvZfDrRlslldSAlZ0gYXJFJpaHg9TdPP+jD1mIyJ19/7YWycWp/cnPzt3tKQZLyihDVce/UeG84WV9OXrhz6R5SMfmCu2VgghKDj3dFpK8GzKFXKvBO9+gvfQOne6+kps3CfvB7ZTKRIpoqIA2VLhYOYBWXoIJoVtmzNHCGaiaGOB7FzJBsN1V5sViG3juReu2fBAgMBAAECggEBALFylBV9MUu+IHk6id3y3VZSd6DeggrZo1U1Ue/TnC67EhU4LdIS/ZMrYVu6ueAD049wpvk4njBGdQLKhVLed5+fDS8/o5kzzzBvMRi3aGQAOUQBL1xaU4ZHYtwLVdvRU/dCfT/zecG6Nvn9Tqtspy7jA7gsaTXUxvKh60+nC2UcOFa8NVAq30biByQ0ClXpG5+HAoJSyQuomWRW1Dm0uTfNzJOOzcp/TYgxzL9Pw9h589oIJiBf0o0EYVOKG4CznF4Gn7bjOPluDB3VGj3au1BYTGD71ksZsbmCf2lbbXVlAKPyZ6bfYtkV6wLXGLzNS0HkOkFR4PIlIspy2IoeZ/kCgYEA866HC3VyKQwowMeQsX1AHweMTxAEe4wsbWJiuha/Ii+qi/06NipjZUyYiquwTQJo/qkBqH7EIKEsWQvcoqkH1dlnzXM7RhYkscCe4DQv5MAr3C70vMhC+NVj6L9lz5GfNNXf6clT3zLvLFHDVKc5iX1fA6YeobndbVPQyna6t18CgYEAupvBlPboKUBG4S+SLUneYsuj0c6FtSqai/sSqEX2IOXUF3B2uwWz+aWDjbhMBPqunTMdW2+FmiaHRySzF8Vxrc2EDN5t6ROOZAG8c5wNgkYDD4nhUabRfTYjK5NkvQHkkZ4xuNdPVO0XkaxV3FXiwzacUr93Og7Eavk7AR6l1N8CgYBqpmjuZ/GV639umClItSO6MOiEteLwW7IaEaRaA5iVkr0W1baDfFvSOwrMLkZT/gkL49YY85pNGZ06P8nJ2ybVvngC4DsB+rEGpuIiCFUpzb2keVydvxwooeQ/On2Jshc23aBJRtcRac5p3EMcKrAw75EFHNBtQdaagcNwyTQBCwKBgQCxyv64mDqAOw6NNI7YeX3ZsV4m4tb/0lSnNBMFooqrs23M20k0TW25WJorp8E+KT2+5tl8qZeoVDclcHD2IBd8WcgLns0neYt7+y97Et7IFT6LSnoUGpWT78W4mdksP6Zvm0KScwnRx4diMskngejox5pPOL824KUBqu4t1e54DwKBgHyRXbFpDxo1ylqitmV7auGTDnoPprU8QFOeWLgCJvkDLLXjgXz21iQ2CmmWCvVgHrnPUaWT19Q9F1fnpslYaY4AIYaZgeejLo5QidmYga8FP3/npnx5WNS6cejx4qOebigWhDHZag34j9CWDrC8+l/WRlcBvFbONv2YKTxJof+5")
7f1fecca1b737f97db39166984b6f31fdf9d83cb29728c29adc7a56ef377a82e4e17c3d00c15affcbd4edd0d9f3935da26741b8fdc63792c013c7f8f293e690c16bf279600e35eb72004dc06950b550a786e5438d61011c6ccfecd076ac53205ff19fbdcf3bb773201263face5c01329c274f4274a222346a93479ccdedeca9fcb1827471f98c0b7ea111bcae907f45d08a0773a941ac14f86f85e41a3765045307c5291a93abb97b50780d26b33ff078698fe39b09805c5e561cafc2c952efed921f01814acde3fcac3e654a1ec35f7c42ac5320f47bc24e7847349373a7a90be03411617d756648ad6f2f265eeb51d34adb8e7a69b3395b1fba2ba2ad64ff5

VerifyBySha1WithRsa验签算法

方法签名:

/// author:姚鑫
/// date:2025-08-07
/// version:1.0
/// desc:JAVA VerifyBySha1WithRsa 验证签名
/// params:content - 签名内容, sign - 签名数据, publicKey - 公钥, keyType - 密钥类型(默认base64), outputFormat - 输出格式(默认hex)
/// return:签名密文
/// call:w ##class(Util.EncryptionUtils).JavaVerifyBySha1WithRsa("1ab姚鑫@#!","7f1fecca1b737f97db39166984b6f31fdf9d83cb29728c29adc7a56ef377a82e4e17c3d00c15affcbd4edd0d9f3935da26741b8fdc63792c013c7f8f293e690c16bf279600e35eb72004dc06950b550a786e5438d61011c6ccfecd076ac53205ff19fbdcf3bb773201263face5c01329c274f4274a222346a93479ccdedeca9fcb1827471f98c0b7ea111bcae907f45d08a0773a941ac14f86f85e41a3765045307c5291a93abb97b50780d26b33ff078698fe39b09805c5e561cafc2c952efed921f01814acde3fcac3e654a1ec35f7c42ac5320f47bc24e7847349373a7a90be03411617d756648ad6f2f265eeb51d34adb8e7a69b3395b1fba2ba2ad64ff5","MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsaERDncBd1Au43GmZWLexp8C8hiNPcWbINcemwmEdn3NPzSOlwO+nU2CgsHLkTkkTqB7ycmdY3hKTGc6uofhhjtIFuK5TJ0o6MpltiF1u8MFi6h0y6YwuSqmIkMHLwFOHrpgj1WtzAKRXa5voYL2Xw60ZbJZXUgJWdIGFyRSaWh4PU3Tz/ow9ZiMidff+2FsnFqf3Jz87d7SkGS8ooQ1XHv1HhvOFlfTl64c+keUjH5grtlYIISg493RaSvBsyhVyrwTvfoL30Dp3uvpKbNwn7we2UykSKaKiANlS4WDmAVl6CCaFbZszRwhmomhjgexcyQbDdVebFYht47kXrtnwQIDAQAB")
ClassMethod JavaVerifyBySha1WithRsa(content As %String, sign As %String, publicKey As %String, keyType As %String = "base64", outputFormat As %String = "hex") As %String

调用结果:

USER>w ##class(Util.EncryptionUtils).JavaVerifyBySha1WithRsa("1ab姚鑫@#!","7f1f   ecca1b737f97db39166984b6f31fdf9d83cb29728c29adc7a56ef377a82e4e17c3d00c15affcbd4edd0d9f3935da26741b8fdc63792c013c7f8f293e690c16bf279600e35eb72004dc06950b550a786e5438d61011c6ccfecd076ac53205ff19fbdcf3bb773201263face5c01329c274f4274a222346a93479ccdedeca9fcb1827471f98c0b7ea111bcae907f45d08a0773a941ac14f86f85e41a3765045307c5291a93abb97b50780d26b33ff078698fe39b09805c5e561cafc2c952efed921f01814acde3fcac3e654a1ec35f7c42ac5320f47bc24e7847349373a7a90be03411617d756648ad6f2f265eeb51d34adb8e7a69b3395b1fba2ba2ad64ff5","MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsaERDncBd1Au43GmZWLexp8C8hiNPcWbINcemwmEdn3NPzSOlwO+nU2CgsHLkTkkTqB7ycmdY3hKTGc6uofhhjtIFuK5TJ0o6MpltiF1u8MFi6h0y6YwuSqmIkMHLwFOHrpgj1WtzAKRXa5voYL2Xw60ZbJZXUgJWdIGFyRSaWh4PU3Tz/ow9ZiMidff+2FsnFqf3Jz87d7SkGS8ooQ1XHv1HhvOFlfTl64c+keUjH5grtlYIISg493RaSvBsyhVyrwTvfoL30Dp3uvpKbNwn7we2UykSKaKiANlS4WDmAVl6CCaFbZszRwhmomhjgexcyQbDdVebFYht47kXrtnwQIDAQAB")

Sha256WithRsa签名算法

方法签名:

/// author:姚鑫
/// date:2025-06-23
/// version:1.0
/// desc:JAVA Sha256WithRsa 签名
/// params:content - 签名内容, privateKey - 私钥, keyType - 密钥类型(默认base64), outputFormat - 输出格式(默认base64)
/// return:签名密文
/// call:w ##class(Util.EncryptionUtils).JavaSignBySha256WithRsa("appid=&nonce=fc8d5a2d-be00-4e9f-852d-1a5935246e0c&timestamp=1750660051161","MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCnG2oVd38TAzh1KD0kna4P3dJhYVLrf2HRbiZAhqp9RuZDn//O/x69FmclsJlxBzbHgiUfAlMi1UnkELNTOhq6eJgrx7C6vUBFIFgYmsx6NBSIiJdAlhNa9ASA1Fvn7HlIdRTau/oV/D9PYM5QV86J2tiywbFWTHVir7uymueHFpinygXN4HBYSxn+2m9rX8O2IWNcGv8aCEvSdbflEn0pusjsMRT3NvZmWo/T8kw6WCcbkEeGKowBsRiObcFilCmO+MLzYUMQb4wI55aj9Y4RTdifxzinmv8Bvi2IWGlxZOpT3mQCE8CK/dez3wMqgVFlDENxNsLDGUBbKG/EKTN7AgMBAAECggEAH4futmo70gyThJe5IcWW6GuEnNdOXB1HCcts8FP4q3bLUAtKq3Y8CJXHlLcD3O3tiiumcXlw0mvIa34zOAsIrBLBM9GUKUg4blKyDMJ4vr5A+Zo8X/VxZYIRr3ViehqGsANXkgZSI//aulGb3FEVKbHfnasqmQwIQjzCf+r2sOhl7Vay2iy/ii5URhXmuG2mUOtBAFlcqnlmRPNnw6AB7b/VZjjM1tLQZwxkPi9BwYEbSQgqNo2PNd/2bqzqC8VaN4Ptdvepfd5Sa8glYFD2gEhGEXmjSFHxi3wiwyB1YFmDuTueWZCjKhQHCUCURh5ZiAy6mOjZ8sUFoNw14sVTkQKBgQDqj3qBWV+vwOnpzch/B7jPnr5hCNKl0Q1LEatA4PDxm74x4IW7Azqw1YlyXDXjVg3cmVada3PHKmELLSKfq4QxKLyi+loUFvGXksvo5t19mqZGFu1F/kL/8vbJdNkdGMhdhQR2effSEkjZSJDq9ELcUS1eANfia55+qfaTbew2/wKBgQC2YZUdApv15na1dksvEWADZiVRqc8jgT84mYFfT9JufoGt+29V0gqdDgwMJiOsEw8Gmn/RduzOSviEpr3Dlwc7/m6zOkxxUDIOQPmpgYHAXNgMjpI4grrfGxUZ0Bug9XjmWVxbzplz8VVJVWkO7EimYZ8pjkaN9LYUgJcJR/hfhQKBgQCw6Lg32MWflDuYOLnQfW15QjxKiVH++DYzeUcVrtJrF9ESY0nZq+zXNKbu1vdZ2CyqRgiawFFZVPBOcqNblAwm25eywGmyHz/l1zTuGznQoxRnZqFcmhHEY2aYuQWLuYZdapbcGM+95EaHgwCyBLps2tkBvlcVEaA/3kb4GP8A1wKBgQCnu205BfpLl84bK5UPz6n+1kWCKmrvm2F6e2sJLk85Aa3gRbrqMcdDE/UugzERg2GxUAw3p2k4fKi8zuD9bfvgSCqlOPuuxvOSOl2icBHVyU2FluWRhWG56J1qZQPT745mQ072vDZS9GPckumRKOvT4TpRLKFk0udWScEebwtVRQKBgQCCS+gxsOLoJ64Lf1Tfa0GCJCzYJKol9BmoShw8Tvt8JMDm7vxt+o2E4ZRuzw0gdO4YsAMEe4jSXwK/+2BmsyjaTHqLeJL/jXTXNGEECPd/GYlaMOT9WuEb6oADS1DFPVCzzXj+lMe6kYyY4Uv87VejrOxBqsjzWdg9TZ61fvSjJg==")
ClassMethod JavaSignBySha256WithRsa(content As %String, privateKey As %String, keyType As %String = "base64", outputFormat As %String = "base64", url As %String = {..#URL}) As %String

调用结果:

USER>w ##class(Util.EncryptionUtils).JavaSignBySha256WithRsa("appid=&nonce=fc8d5a2d-be00-4e9f-852d-1a5935246e0c&timestamp=1750660051161","MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCnG2oVd38TAzh1KD0kna4P3dJhYVLrf2HRbiZAhqp9RuZDn//O/x69FmclsJlxBzbHgiUfAlMi1UnkELNTOhq6eJgrx7C6vUBFIFgYmsx6NBSIiJdAlhNa9ASA1Fvn7HlIdRTau/oV/D9PYM5QV86J2tiywbFWTHVir7uymueHFpinygXN4HBYSxn+2m9rX8O2IWNcGv8aCEvSdbflEn0pusjsMRT3NvZmWo/T8kw6WCcbkEeGKowBsRiObcFilCmO+MLzYUMQb4wI55aj9Y4RTdifxzinmv8Bvi2IWGlxZOpT3mQCE8CK/dez3wMqgVFlDENxNsLDGUBbKG/EKTN7AgMBAAECggEAH4futmo70gyThJe5IcWW6GuEnNdOXB1HCcts8FP4q3bLUAtKq3Y8CJXHlLcD3O3tiiumcXlw0mvIa34zOAsIrBLBM9GUKUg4blKyDMJ4vr5A+Zo8X/VxZYIRr3ViehqGsANXkgZSI//aulGb3FEVKbHfnasqmQwIQjzCf+r2sOhl7Vay2iy/ii5URhXmuG2mUOtBAFlcqnlmRPNnw6AB7b/VZjjM1tLQZwxkPi9BwYEbSQgqNo2PNd/2bqzqC8VaN4Ptdvepfd5Sa8glYFD2gEhGEXmjSFHxi3wiwyB1YFmDuTueWZCjKhQHCUCURh5ZiAy6mOjZ8sUFoNw14sVTkQKBgQDqj3qBWV+vwOnpzch/B7jPnr5hCNKl0Q1LEatA4PDxm74x4IW7Azqw1YlyXDXjVg3cmVada3PHKmELLSKfq4QxKLyi+loUFvGXksvo5t19mqZGFu1F/kL/8vbJdNkdGMhdhQR2effSEkjZSJDq9ELcUS1eANfia55+qfaTbew2/wKBgQC2YZUdApv15na1dksvEWADZiVRqc8jgT84mYFfT9JufoGt+29V0gqdDgwMJiOsEw8Gmn/RduzOSviEpr3Dlwc7/m6zOkxxUDIOQPmpgYHAXNgMjpI4grrfGxUZ0Bug9XjmWVxbzplz8VVJVWkO7EimYZ8pjkaN9LYUgJcJR/hfhQKBgQCw6Lg32MWflDuYOLnQfW15QjxKiVH++DYzeUcVrtJrF9ESY0nZq+zXNKbu1vdZ2CyqRgiawFFZVPBOcqNblAwm25eywGmyHz/l1zTuGznQoxRnZqFcmhHEY2aYuQWLuYZdapbcGM+95EaHgwCyBLps2tkBvlcVEaA/3kb4GP8A1wKBgQCnu205BfpLl84bK5UPz6n+1kWCKmrvm2F6e2sJLk85Aa3gRbrqMcdDE/UugzERg2GxUAw3p2k4fKi8zuD9bfvgSCqlOPuuxvOSOl2icBHVyU2FluWRhWG56J1qZQPT745mQ072vDZS9GPckumRKOvT4TpRLKFk0udWScEebwtVRQKBgQCCS+gxsOLoJ64Lf1Tfa0GCJCzYJKol9BmoShw8Tvt8JMDm7vxt+o2E4ZRuzw0gdO4YsAMEe4jSXwK/+2BmsyjaTHqLeJL/jXTXNGEECPd/GYlaMOT9WuEb6oADS1DFPVCzzXj+lMe6kYyY4Uv87VejrOxBqsjzWdg9TZ61fvSjJg==")

K54e8FNcXKlJgOHwnOT5B5ee4p8R6R91gBLanJsh+REgiB3FaQzV9c8wd+P/4aowfQ/L6l+lXZnO6I7AEA51+JjpMQzSvV8Z+Q00Zn1iohx6v2+hLhe16CRyPg6pDmTwNduadskUubqgKBHqBuGcZ8+lAH+9LnSPH/+YAa6adSA5EFbfehp06Jc3/uIvNVXmwqH+3nvhaJuSeyW0Z4SvPXEtYkL+J3Q5/sB8WlUoD3N56Xwv/gsHLTNhL9SzMpFdHWnss38Qv2sajUuUojnkFOsdO9y1lVtsuRsKV7blRX8dhKWYOhMF/U9wXYPY7Yc0sR7L4iT4K62tbaggGhElmg==

RsaEncryptByPublicKey公钥加密算法

方法签名:

/// author:姚鑫
/// date:2025-09-03
/// update:2026-01-23,增加 keyType 类型 pemFile 与 encoding
/// version:2.0
/// desc:JavaRsaEncryptByPublicKey 公钥机密
/// params:content - 明文, publicKey - 公钥, keyType - 密钥类型("base64"、"hex" 或 "pemFile",默认base64), outputFormat - 输出格式("base64" 或 "hex",默认hex),encoding 填充方式:1=OAEP, 2=PKCS1Padding,默认为PKCS1Padding
/// return:密文
/// call:w ##class(Util.Impl.EncryptionUtils).JavaRsaEncryptByPublicKey("1ab姚鑫@#!","MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhZuxSMZ2WkQBkJL183S3lcefQBL1Yor/fS0kQqllcOWSUTPGa+MAdnUtA5K+QheYNURMKxJfRout6qUHijXybnh4g4LEtDhOyn7YppEd9EtzeorYdUCplYFgEN+MEAV9gqH9xp0fhHet7w8aAfVuBU2VVIZ3dKeaSZepSbmXaSlEMQ3kE1+mdVv63SW1PyAS7m8v0rKtP7yu97227SK9M2djjqu8MYNFMHNrxv2VWOklrsllUzV4/jWxa9bQqH91/ws9kmOKYdMSKpzhKcnAa6LJroHHZbRXPIPn+zcPunRzoPg1sAdmRJ+dgZiB6dgVwdgMZCYmsc3+LcKYKjyXNwIDAQAB")
/// call:w ##class(Util.Impl.EncryptionUtils).JavaRsaEncryptByPublicKey("1ab姚鑫@#!","G:\Desktop\my-cert.pem","pemFile")
ClassMethod JavaRsaEncryptByPublicKey(content As %String, publicKey As %String, keyType As %String = "base64", outputFormat As %String = "base64", encoding As %Integer = 2, url As %String = {..#StandardAlgUrl}) As %String

调用结果(默认方式):

USER>w ##class(Util.EncryptionUtils).JavaRsaEncryptByPublicKey("1ab姚鑫@#!","MI   IBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhZuxSMZ2WkQBkJL183S3lcefQBL1Yor/fS0kQqllcOWSUTPGa+MAdnUtA5K+QheYNURMKxJfRout6qUHijXybnh4g4LEtDhOyn7YppEd9EtzeorYdUCplYFgEN+MEAV9gqH9xp0fhHet7w8aAfVuBU2VVIZ3dKeaSZepSbmXaSlEMQ3kE1+mdVv63SW1PyAS7m8v0rKtP7yu97227SK9M2djjqu8MYNFMHNrxv2VWOklrsllUzV4/jWxa9bQqH91/ws9kmOKYdMSKpzhKcnAa6LJroHHZbRXPIPn+zcPunRzoPg1sAdmRJ+dgZiB6dgVwdgMZCYmsc3+LcKYKjyXNwIDAQAB")
IFtQHkrjAdMBJuMHQ4WsO+6xxKrnY/LHP2AlvVpLOhV5YYpSA//OhEm+UDxAL/+JHo0ChH9+zLddGo8U/RM8U8MU2LNOXYhq31KTO5WKq2dakof/WfOGZe/SwU2ihy9HCpRbrPg8vVRJP9PBlp7Muv2/BYce69uMXtwkSWCyxMf/jaOmTOYwRIPCqSu9G8XhcY75t/Hb3feSrRjJAUQBEA4NS7kWPdMdkbcltd+67hN7CY/ERz5kwtnwG6zvyFU+ftoqhihNUxIpWwBa8mja0O3LpCsUampI0I4a3kWbEM76e6yJHV/PrAnc+fIaVF0BZUOtYdlsjm8bTCINW8v+1w==

调用结果(pem文件方式):

需要将密钥文件放在与部署JAVA机密服务相同的服务器上并指定路径、

USER>w ##class(Util.EncryptionUtils).JavaRsaEncryptByPublicKey("1ab姚鑫@#!","G:   \Desktop\my-cert.pem","pemFile")
OqQvyXH9UVQ5pXjijChC/z0nRPjUl85F8963i9MZIodd/DNFRErapYrEJKNDFk1TAds/Jy9kREGHiWGOsAJ5OeLwUwtlc4fIEjleZ8b7eaHGrNudpGVmOikcfQ3pYvE+v7AwfYwPBBwjIp2zxevL9AOc2DEdd3wN0MsqJ2OS044=

RsaDecryptByPrivateKey私钥解密算法

方法签名:

/// author:姚鑫
/// date:2025-09-03
/// update:2026-01-23,增加 keyType 类型 pemFile 与 encoding
/// version:2.0
/// desc:JavaRsaDecryptByPrivateKey 私钥解密
/// params:content - 加密内容, privateKey - 私钥, keyType - 密钥类型("base64"、"hex" 或 "pemFile",默认base64), outputFormat - 输出格式("base64" 或 "hex",默认hex),encoding 填充方式:1=OAEP, 2=PKCS1Padding,默认为PKCS1Padding
/// return:明文
/// call:w ##class(Util.Impl.EncryptionUtils).JavaRsaDecryptByPrivateKey("Dr3B3lk02lXnQAjyArby8ZX5Pbj90/PrHFZdqxeN5nLQXYVJYaD7JSd5Am5y43Jhh6yPqiUHnNAscKCUcIOW60kyT0wBm1lKgbGP2e0fb8U6IHrQarIPPd3dlLMj4pHCN9JwP1Jm+Tb9T/e5xmEkLrZpC3RfEf/NvSl6IdGXzPjQcrwgY8U6+WgwPtUPIezt0ujJwdW1ZmFUq7hO2qpGHyX9z/0phCW7zPYV3np+PRxl/Dqxep3EkLNQKRf1ihPLerMctKzeEengNPCERURytCCcXD0gHZfLiGC3gbNnSvWHNTGMeVrW/AE0c815eOm+HQq1onrlmgFSwp8MF7QM7w==","MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCFm7FIxnZaRAGQkvXzdLeVx59AEvViiv99LSRCqWVw5ZJRM8Zr4wB2dS0Dkr5CF5g1REwrEl9Gi63qpQeKNfJueHiDgsS0OE7KftimkR30S3N6ith1QKmVgWAQ34wQBX2Cof3GnR+Ed63vDxoB9W4FTZVUhnd0p5pJl6lJuZdpKUQxDeQTX6Z1W/rdJbU/IBLuby/Ssq0/vK73vbbtIr0zZ2OOq7wxg0Uwc2vG/ZVY6SWuyWVTNXj+NbFr1tCof3X/Cz2SY4ph0xIqnOEpycBrosmugcdltFc8g+f7Nw+6dHOg+DWwB2ZEn52BmIHp2BXB2AxkJiaxzf4twpgqPJc3AgMBAAECggEAEPnaSbvlt8xiQoNZusg+t0o44sRF53JvyfDdZZbua6zPrX+dm4GpQmPbB1Qy1mT3EvWNk/9umaEPxPuY/KekGQM3lMYdxiRNZo89adSQcMTRdGWF4UgJBBT/JsWwnyyDaQC6JO073vHx6KkLjeooQ4Y7DhVTwj+1a9pYSSTKpzLHC/SCEA2tfPZU5wcca0/y+686vtDucWhwAP+SLX7SeeddEM5PgNK2IcKucsD3muypg8TFqQctwmQw+zCQvp3w6L3As4FLKkI8YUTnxntkec1OQqgcgxpfcxaVGbt8TDaTg/lnch2dcFW1sIjLmcDgKX5XRkKH4kHWaQmSXSdMeQKBgQDBBImE3Hgz8elsljKm+LduKgjpBuP0O06afLc1oVUWkV3xhN1ho57HJpj4lrB+yf+mNSefsS+BUB3bVCW/NFVbaFSrCta4ylduNHz7+uGkswEV7HgOwU6vH39K9Fi3fZpotvBIIa2UFHyltAdiNVO0/x8EHn+80H+txSYfEqvhNQKBgQCxNHZp9Rcs1E7d7BJWuWCsCKyK7AlXpIOuD58EedtdAtJqcIIR51GCe1UzqNVFKyRECPLcHMlZHnYtHYQflxFeuc0/VHxJ9zx5VemCRRklLydvFBShRUfZcTkeBC0EGjU0fjdp3cJU2VARV93LLL1g9ujYaruHpW0o8CDnMUbwOwKBgA2jm3AXACtzgbIZnvSriJKxR7Xntb3xXumNvIh+oPuaRBAn+ljG7hZWhOK0Cz66WWVORkGDjL7PgXyZIp2zPgDai3kWp/ug2LLB5L8NiFpSB9abwhQQ1tWLHTyXrZkxt/KEUtBWCOT42aH/6bGn4QVeLbvlx9L4zLzjvIDfmeOtAoGAahDHy9YagAe4CRczRtuApJgwhpqPYPkkpDvPZ4N0rLByt6kOAZ9eZ2Zg8iHdPaB7/YkJrHxCfGhCPfDL04i9qeA2nPB50F/+v3WP5hxr15jo1pDDZGAuiFU/5dqEA0+YhwoBKwnENrs4NJlONT1bQT2o01jXVHLM6tMILrmNB18CgYApIBXPauzUbxAXpVHJqbBQl/EX4pSt5K5mzAwXnWxKir+GeBkqBzDx+8eZcaQLT9pgZGPSXeg+g12Ik2nIcPaCK09vypHsajwkV3g06ZQ5UaMeoh9F3Fg0LJRhZi/RMvpQlH3ZzaQWoN35saRd7y/z9L/tQImxBWVbhdtP5bsPtg==")
/// call:w ##class(Util.Impl.EncryptionUtils).JavaRsaDecryptByPrivateKey("GJPAntT+PVqY5SnRkhlP526QcNOwTAX1JhZItFzC9tF7LxrKxXzoFxZtyqFULEFEdssWRT9dzkqZutgApHm7gSp7dp2YLnnGUV/PX+Q/wOHmR5jsYvl+y+igUT7LUAWNTtO3vMSodi9H/KwES+c/TFqAKsO3njNJ2MYKtbzNY/M=","G:\Desktop\my-key.pem","pemFile")
ClassMethod JavaRsaDecryptByPrivateKey(content As %String, privateKey As %String, keyType As %String = "base64", outputFormat As %String = "base64", encoding As %Integer = 2, url As %String = {..#StandardAlgUrl}) As %String

调用结果(默认方式):

USER>w ##class(Util.EncryptionUtils).JavaRsaDecryptByPrivateKey("Dr3B3lk02lXnQAjyArby8ZX5Pbj90/PrHFZdqxeN5nLQXYVJYaD7JSd5Am5y43Jhh6yPqiUHnNAscKCUcIOW60kyT0wBm1lKgbGP2e0fb8U6IHrQarIPPd3dlLMj4pHCN9JwP1Jm+Tb9T/e5xmEkLrZpC3RfEf/NvSl6IdGXzPjQcrwgY8U6+WgwPtUPIezt0ujJwdW1ZmFUq7hO2qpGHyX9z/0phCW7zPYV3np+PRxl/Dqxep3EkLNQKRf1ihPLerMctKzeEengNPCERURytCCcXD0gHZfLiGC3gbNnSvWHNTGMeVrW/AE0c815eOm+HQq1onrlmgFSwp8MF7QM7w==","MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCFm7FIxnZaRAGQkvXzdLeVx59AEvViiv99LSRCqWVw5ZJRM8Zr4wB2dS0Dkr5CF5g1REwrEl9Gi63qpQeKNfJueHiDgsS0OE7KftimkR30S3N6ith1QKmVgWAQ34wQBX2Cof3GnR+Ed63vDxoB9W4FTZVUhnd0p5pJl6lJuZdpKUQxDeQTX6Z1W/rdJbU/IBLuby/Ssq0/vK73vbbtIr0zZ2OOq7wxg0Uwc2vG/ZVY6SWuyWVTNXj+NbFr1tCof3X/Cz2SY4ph0xIqnOEpycBrosmugcdltFc8g+f7Nw+6dHOg+DWwB2ZEn52BmIHp2BXB2AxkJiaxzf4twpgqPJc3AgMBAAECggEAEPnaSbvlt8xiQoNZusg+t0o44sRF53JvyfDdZZbua6zPrX+dm4GpQmPbB1Qy1mT3EvWNk/9umaEPxPuY/KekGQM3lMYdxiRNZo89adSQcMTRdGWF4UgJBBT/JsWwnyyDaQC6JO073vHx6KkLjeooQ4Y7DhVTwj+1a9pYSSTKpzLHC/SCEA2tfPZU5wcca0/y+686vtDucWhwAP+SLX7SeeddEM5PgNK2IcKucsD3muypg8TFqQctwmQw+zCQvp3w6L3As4FLKkI8YUTnxntkec1OQqgcgxpfcxaVGbt8TDaTg/lnch2dcFW1sIjLmcDgKX5XRkKH4kHWaQmSXSdMeQKBgQDBBImE3Hgz8elsljKm+LduKgjpBuP0O06afLc1oVUWkV3xhN1ho57HJpj4lrB+yf+mNSefsS+BUB3bVCW/NFVbaFSrCta4ylduNHz7+uGkswEV7HgOwU6vH39K9Fi3fZpotvBIIa2UFHyltAdiNVO0/x8EHn+80H+txSYfEqvhNQKBgQCxNHZp9Rcs1E7d7BJWuWCsCKyK7AlXpIOuD58EedtdAtJqcIIR51GCe1UzqNVFKyRECPLcHMlZHnYtHYQflxFeuc0/VHxJ9zx5VemCRRklLydvFBShRUfZcTkeBC0EGjU0fjdp3cJU2VARV93LLL1g9ujYaruHpW0o8CDnMUbwOwKBgA2jm3AXACtzgbIZnvSriJKxR7Xntb3xXumNvIh+oPuaRBAn+ljG7hZWhOK0Cz66WWVORkGDjL7PgXyZIp2zPgDai3kWp/ug2LLB5L8NiFpSB9abwhQQ1tWLHTyXrZkxt/KEUtBWCOT42aH/6bGn4QVeLbvlx9L4zLzjvIDfmeOtAoGAahDHy9YagAe4CRczRtuApJgwhpqPYPkkpDvPZ4N0rLByt6kOAZ9eZ2Zg8iHdPaB7/YkJrHxCfGhCPfDL04i9qeA2nPB50F/+v3WP5hxr15jo1pDDZGAuiFU/5dqEA0+YhwoBKwnENrs4NJlONT1bQT2o01jXVHLM6tMILrmNB18CgYApIBXPauzUbxAXpVHJqbBQl/EX4pSt5K5mzAwXnWxKir+GeBkqBzDx+8eZcaQLT9pgZGPSXeg+g12Ik2nIcPaCK09vypHsajwkV3g06ZQ5UaMeoh9F3Fg0LJRhZi/RMvpQlH3ZzaQWoN35saRd7y/z9L/tQImxBWVbhdtP5bsPtg==")
1ab姚鑫@#!

调用结果(默认方式):

USER>w ##class(Util.EncryptionUtils).JavaRsaDecryptByPrivateKey("GJPAntT+PVqY5SnRkhlP526QcNOwTAX1JhZItFzC9tF7LxrKxXzoFxZtyqFULEFEdssWRT9dzkqZutgApHm7gSp7dp2YLnnGUV/PX+Q/wOHmR5jsYvl+y+igUT7LUAWNTtO3vMSodi9H/KwES+c/TFqAKsO3njNJ2MYKtbzNY/M=","G:\Desktop\my-key.pem","pemFile")
1ab姚鑫@#!

非标准加密算法

/// 日期:2025年08月06日
/// 产品组:计费
/// 使用业务:结算,有挂号支付
/// 公司名称缩写:YLSWGD
/// 文档名称:银联商务广东分公司互联网接入接口规范_统一支付1.0.1
/// 使用项目:广东三九脑科医院
/// 项目交付:徐凯祥 QQ:593984441

YlswgdEncrypt加密

方法签名:

/// author:姚鑫
/// date:2025-08-07
/// version:1.0
/// desc:JAVA NonstandardYlswgdEncrypt 加密
/// params:plainText - 明文, publicKeyPath - 公钥密钥路径
/// return:密文
/// call:w ##class(Util.EncryptionUtils).JavaNonstandardYlswgdEncrypt("1ab姚鑫@#!","E:\Desktop\key\gnete_2006.cer")
ClassMethod JavaNonstandardYlswgdEncrypt(plainText As %String, publicKeyPath As %String) As %String

调用结果:

USER>w ##class(Util.EncryptionUtils).JavaNonstandardYlswgdEncrypt("1ab姚鑫@#!",   "E:\Desktop\key\gnete_2006.cer")
11e392c5ff4df03cbe03ece26c26c34912701b2985e6a253f415fefce65c7bea801d9bfbe1f03726c5ba1caf49b221935c1a60d5dd4a2663c09d3cf6a9a737f69ee2435b654cde2b82b8fbe83cdae1dbe26f62805c7b3aea4e718641641c5d782fbeee47d580aeeb22f87f69da20fb224ba2d15053dd44240cfece88ceba657e

YlswgdEncrypt解密

方法签名:

/// author:姚鑫
/// date:2025-08-07
/// version:1.0
/// desc:JAVA NonstandardYlswgdEncrypt 解密
/// params:cipherText - 密文, privateKeyPath - 私钥密钥路径
/// return:明文
/// call:w ##class(Util.EncryptionUtils).JavaNonstandardYlswgdDecrypt("219b4099854c4e666958ff252f72d8c2a6bdcc14f4dc70fb679870f72eb18bdad876f5bfbf9263b5c35cf51f73dabf21af08d189269b1d3354221dee8d2ce9ada162675ea560627fae3116fe482472dfdcb35a8e36622fdf1dad1ae0f293075de534a24ca1b30d443a01802f6ddf73ab90ad14bea603590d786fa3c7e7bae49e","E:\Desktop\key\gnete_2006.pfx")
ClassMethod JavaNonstandardYlswgdDecrypt(cipherText As %String, privateKeyPath As %String) As %String

调用结果:

USER>w ##class(Util.EncryptionUtils).JavaNonstandardYlswgdDecrypt("219b4099854c4e666958ff252f72d8c2a6bdcc14f4dc70fb679870f72eb18bdad876f5bfbf9263b5c35cf51f73dabf21af08d189269b1d3354221dee8d2ce9ada162675ea560627fae3116fe482472dfdcb35a8e36622fdf1dad1ae0f293075de534a24ca1b30d443a01802f6ddf73ab90ad14bea603590d786fa3c7e7bae49e","E:\Desktop\key\gnete_2006.pfx")
1ab姚鑫@#!

SM2算法

SM2签名算法

方法签名:

/// author:姚鑫
/// date:2025-05-12
/// version:1.0
/// desc:JAVA SM2签名
/// params:content - 明文, privateKey - 私钥
/// return:HEX密文
/// call:w ##class(Util.EncryptionUtils).JavaSm2Sign("1ab姚鑫@#!","a99d6978656355b570a19cc707b2ea68ed033c3fa436df9c0a15e84a06069c7b")
ClassMethod JavaSm2Sign(content As %String, privateKey As %String) As %String

调用结果:

USER>w ##class(Util.EncryptionUtils).JavaSm2Sign("1ab姚鑫@#!","a99d6978656355b570a19cc707b2ea68ed033c3fa436df9c0a15e84a06069c7b")                        
30450220782afaa3678e8da0776ad06af7a4ccdca4b2c6836d1fdf5f6228fa2b1d783f52022100a1987fb70c2dcda03c6d3bb815565270e936e7d7a96d40534993d9319516c9f7

SM2验签算法

方法签名:

/// author:姚鑫
/// date:2025-05-12
/// version:1.0
/// desc:JAVA SM2验证签名
/// params:content - 明文, publicKey - 公钥, sign - 签名密文
/// return:1 成功 0 失败
/// call:w ##class(Util.EncryptionUtils).JavaSm2Verify("1ab姚鑫@#!","04b674b6edfd08f754410b21cc3c8b522f318a1f1b27403bc63a290b7e1790d03d967d06c46e69357793967ff42a34d77ed5d7bb40d31b7f5ab0b0840017cff114","3044022016fb0f645bbc0ba9fbeacb3dfb7ba20a7c629e64183149d8a43b6ece471faba802202dcfd47e72fc45011eb280f328312f78aaad48d499e648fc8ba7b48844f0a236")
ClassMethod JavaSm2Verify(content As %String, publicKey As %String, sign As %String) As %Boolean

调用结果:

USER>w ##class(Util.EncryptionUtils).JavaSm2Verify("1ab姚鑫@#!","04b674b6edfd08f754410b21cc3c8b522f318a1f1b27403bc63a290b7e1790d03d967d06c46e69357793967ff42a34d77ed5d7bb40d31b7f5ab0b0840017cff114","3044022016fb0f645bbc0ba9fbeacb3dfb7ba20a7c629e64183149d8a43b6ece471faba802202dcfd47e72fc45011eb280f328312f78aaad48d499e648fc8ba7b48844f0a236")

SM2加密算法

方法签名:

/// author:姚鑫
/// date:2025-05-12
/// version:1.0
/// desc:JAVA SM2 加密
/// params:content - 明文, publicKey - 公钥
/// return:HEX密文
/// call:w ##class(Util.EncryptionUtils).JavaSm2Encrypt("1ab姚鑫@#!","04b674b6edfd08f754410b21cc3c8b522f318a1f1b27403bc63a290b7e1790d03d967d06c46e69357793967ff42a34d77ed5d7bb40d31b7f5ab0b0840017cff114")
ClassMethod JavaSm2Encrypt(content As %String, publicKey As %String, mode As %String = "C1C3C2") As %String

调用结果:

USER>w ##class(Util.EncryptionUtils).JavaSm2Encrypt("1ab姚鑫@#!","04b674b6edfd08f754410b21cc3c8b522f318a1f1b27403bc63a290b7e1790d03d967d06c46e69357793967ff42a34d77ed5d7bb40d31b7f5ab0b0840017cff114")                                      
04156906b603c8f527c7901b851e99a76468c8c0ff260671594593d038e32b83773e7c91944864c1858ba7939498f81ce954067a939447b0a6e16b4c4e631f5280857cc1112752c546f4393da89fcc93831840f77facef44483f7a49db1a2d61c4f8cbde9213dc5bd3d00989412d28

USER>w ##class(Util.EncryptionUtils).JavaSm2Encrypt("1ab姚鑫@#!","04b674b6edfd0   8f754410b21cc3c8b522f318a1f1b27403bc63a290b7e1790d03d967d06c46e69357793967ff42a34d77ed5d7bb40d31b7f5ab0b0840017cff114","C1C2C3")
04d6245ab07dea915a090f93345c2a657bf6b5da3237bb24ab5aa2810bf26e9e93a9453072f6e285697c0983a3bbacb9a08ee53112910f3fc37b1c55fa000f93e8cc693e9a8ce071f787410cc464325268e51b0c48acd2c055988cce89881e17e2b4b7fb8a37cc167f3aff0a1e3c44

SM2解密算法

方法签名:

/// author:姚鑫
/// date:2025-05-12
/// version:1.0
/// desc:JAVA SM2解密
/// params:cipherText - 密文, privateKey - 私钥
/// return:明文
/// call:w ##class(Util.EncryptionUtils).JavaSm2Decrypt("042d2e5e82795458f4599a377bd08b758de09431d1352c2ff461d5c6cac037c75b4afa2b875ed028ff762a2b901065d617eef788149cd6324cf5089c674d7c4595dededad2603cdfac80bf17ff4d03e8ce50f0ee5334282976e8481c2476a6369252657f3cfde02b3b43b34e8ccff9","a99d6978656355b570a19cc707b2ea68ed033c3fa436df9c0a15e84a06069c7b")
ClassMethod JavaSm2Decrypt(cipherText As %String, privateKey As %String, mode As %String = "C1C3C2") As %String

调用结果:

USER>w ##class(Util.EncryptionUtils).JavaSm2Decrypt("042d2e5e82795458f4599a377bd08b758de09431d1352c2ff461d5c6cac037c75b4afa2b875ed028ff762a2b901065d617eef788149cd6324cf5089c674d7c4595dededad2603cdfac80bf17ff4d03e8ce50f0ee5334282976e8481c2476a6369252657f3cfde02b3b43b34e8ccff9","a99d6978656355b570a19cc707b2ea68ed033c3fa436df9c0a15e84a06069c7b")
1ab姚鑫@#!

USER>w ##class(Util.EncryptionUtils).JavaSm2Decrypt("04d6245ab07dea915a090f93345c2a657bf6b5da3237bb24ab5aa2810bf26e9e93a9453072f6e285697c0983a3bbacb9a08ee53112910f3fc37b1c55fa000f93e8cc693e9a8ce071f787410cc464325268e51b0c48acd2c055988cce89881e17e2b4b7fb8a37cc167f3aff0a1e3c44","a99d6978656355b570a19cc707b2ea68ed033c3fa436df9c0a15e84a06069c7b","C1C2C3")
1ab姚鑫@#!

SM2 PKCS8加密算法

公钥为 BASE64编码PCKS8类型,需使用Bouncy Castle解析公钥

方法签名:

/// author:姚鑫
/// date:2026-01-19
/// version:1.0
/// desc:JAVA SM2加密
/// params:content - 明文, publicKey - 公钥(PCKS8类型 BASE64加密 使用Bouncy Castle解析公钥), mode - 默认C1C3C2,可选值C1C2C3, isResultHex - 1 结果为hex否则为base64
/// return:密文
/// call:w ##class(Util.EncryptionUtils).JavaSm2Encrypt4PKCS8("1ab姚鑫@#!","LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQk16Q0I3QVlIS29aSXpqMENBVENCNEFJQkFUQXNCZ2NxaGtqT1BRRUJBaUVBLy8vLy92Ly8vLy8vLy8vLwovLy8vLy8vLy8vOEFBQUFBLy8vLy8vLy8vLzh3UkFRZy8vLy8vdi8vLy8vLy8vLy8vLy8vLy8vLy8vOEFBQUFBCi8vLy8vLy8vLy93RUlDanArcDZkbjE0MFRWcWVTODlsQ2Fmemw0bjFGYXVQa3QyOHZVRk5sQTZUQkVFRU1zU3UKTEI4WmdSbGZtUVJHYWpuSmxJL2pDNy95Wmd2aGNWcEZpVE5NZE1lOE56YWk5UFozbkZtOXp1TnJhU0ZUMEttSApmTVlxUjBBQzN6TGxJVG53b0FJaEFQLy8vLzcvLy8vLy8vLy8vLy8vLy85eUE5OXJJY1lGSzFPNzlBazUxVUVqCkFnRUJBMElBQkt2NnhzTkN2QUNteGd1SGREOWx1WVc1Q25RbFVmazcyM1JxYjRMNUpua21rTzJNQTNTSmNwNm8KMS9FRzM4ZWk5S2duRXFiV2lTcktHODJYbExTTi9KVT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg","C1C2C3",0)
ClassMethod JavaSm2Encrypt4PKCS8(content As %String, publicKey As %String, mode As %String = "C1C3C2", isResultHex As %String = 0) As %String

调用结果:

USER>w ##class(Util.EncryptionUtils).JavaSm2Encrypt4PKCS8("1ab姚鑫@#!","LS0tLS1   CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQk16Q0I3QVlIS29aSXpqMENBVENCNEFJQkFUQXNCZ2NxaGtqT1BRRUJBaUVBLy8vLy92Ly8vLy8vLy8vLwovLy8vLy8vLy8vOEFBQUFBLy8vLy8vLy8vLzh3UkFRZy8vLy8vdi8vLy8vLy8vLy8vLy8vLy8vLy8vOEFBQUFBCi8vLy8vLy8vLy93RUlDanArcDZkbjE0MFRWcWVTODlsQ2Fmemw0bjFGYXVQa3QyOHZVRk5sQTZUQkVFRU1zU3UKTEI4WmdSbGZtUVJHYWpuSmxJL2pDNy95Wmd2aGNWcEZpVE5NZE1lOE56YWk5UFozbkZtOXp1TnJhU0ZUMEttSApmTVlxUjBBQzN6TGxJVG53b0FJaEFQLy8vLzcvLy8vLy8vLy8vLy8vLy85eUE5OXJJY1lGSzFPNzlBazUxVUVqCkFnRUJBMElBQkt2NnhzTkN2QUNteGd1SGREOWx1WVc1Q25RbFVmazcyM1JxYjRMNUpua21rTzJNQTNTSmNwNm8KMS9FRzM4ZWk5S2duRXFiV2lTcktHODJYbExTTi9KVT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg","C1C2C3",0)
BA8VxprAUKnLSLvKPxJUDrnEMYVQoyNSme5pB979brv+tyMqhyqu7F1RTTQJ5QFXwr180SKmN6aLcA9GrQber2XTOvY0BqV/6tiaBn8CtjCHswdIJhYRrAWtpJr3jKc+l0cfyxBAROsjk7iJs02/

SM3算法

SM3加密算法

方法签名:

/// author:姚鑫
/// date:2025-07-17
/// version:1.0
/// desc:JAVA SM3加密
/// params:plainText - 明文, isHexOutput - 1 输出为HEX, 0 输出为BASE64
/// return:isHexOutput - 1 输出为HEX, 0 输出为BASE64
/// call:w ##class(Util.EncryptionUtils).JavaSm3Encrypt("Hello World")
/// call:w ##class(Util.EncryptionUtils).JavaSm3Encrypt("Hello World", 0)
ClassMethod JavaSm3Encrypt(plainText As %String, isHexOutput As %Boolean = 1, url As %String = {..#URL}) As %String

调用结果:

USER>w ##class(Util.EncryptionUtils).JavaSm3Encrypt("Hello World")
77015816143ee627f4fa410b6dad2bdb9fcbdf1e061a452a686b8711a484c5d7
USER>w ##class(Util.EncryptionUtils).JavaSm3Encrypt("Hello World", 0)
dwFYFhQ+5if0+kELba0r25/L3x4GGkUqaGuHEaSExdc=

HMAC算法

方法签名:

/// author:姚鑫
/// date:2025-07-17
/// version:1.0
/// desc:JAVA SM3 HMAC加密
/// params:data - 明文, key - 密钥, isHexOutput - 1 输出为HEX, 0 输出为BASE64
/// return:isHexOutput - 1 输出为HEX, 0 输出为BASE64
/// call:w ##class(Util.EncryptionUtils).JavaSm3Hmac("Hello World", "mySecretKey123456")
/// call:w ##class(Util.EncryptionUtils).JavaSm3Hmac("Hello World", "mySecretKey123456","0")
ClassMethod JavaSm3Hmac(data As %String, key As %String, isHexOutput As %Boolean = 1, url As %String = {..#URL}) As %String

调用结果:

USER>w ##class(Util.Impl.EncryptionUtils).JavaSm3Hmac("Hello World", "mySecretKey123456")
MI/1ELLsN8gJbGFnZLjIGM6ergxswdKCDyhT7ZWyY/g=

验证HMAC算法

方法签名:

/// author:姚鑫
/// date:2025-07-17
/// version:1.0
/// desc:JAVA SM3 VerifyHmac
/// params:data - 明文, key - 密钥, expectedHmac - 对比hmac值, isHexOutput - 1 输出为HEX
/// return:isHexOutput - 1 输出为HEX, 0 输出为BASE64
/// call:w ##class(Util.EncryptionUtils).JavaSm3VerifyHmac("Hello World", "mySecretKey123456","MI/1ELLsN8gJbGFnZLjIGM6ergxswdKCDyhT7ZWyY/g=")
/// call:w ##class(Util.EncryptionUtils).JavaSm3VerifyHmac("Hello World", "mySecretKey123456","MI/1ELLsN8gJbGFnZLjIGM6ergxswdKCDyhT7ZWyY/g=")
ClassMethod JavaSm3VerifyHmac(data As %String, key As %String, expectedHmac As %String, isHexOutput As %Boolean = 1, url As %String = {..#URL}) As %String

调用结果:

USER>w ##class(Util.Impl.EncryptionUtils).JavaSm3VerifyHmac("Hello World", "mySecretKey123456","MI/1ELLsN8gJbGFnZLjIGM6ergxswdKCDyhT7ZWyY/g=")
true

SM4算法

Sm4CbcZero加密算法

方法签名:

/// author:姚鑫
/// date:2025-05-15
/// version:1.0
/// desc:JAVA SM4 Cbc Zero 加密
/// params:plainText - 明文, keyStr - 密钥, ivStr - 向量, keyType - 密钥类型(默认text), outputFormat - 输出格式(默认hex)
/// return:密文
/// call:w ##class(Util.Impl.EncryptionUtils).JavaSm4CbcZeroEncrypt("1ab姚鑫@#!","be82c53a6c452f2e","gatherdataeworld")
ClassMethod JavaSm4CbcZeroEncrypt(plainText As %String, keyStr As %String, ivStr As %String, keyType As %String = "text", outputFormat As %String = "hex", url As %String = {..#StandardAlgUrl}) As %String

调用结果:

USER>w ##class(Util.Impl.EncryptionUtils).JavaSm4CbcZeroEncrypt("1ab姚鑫@#!","b   e82c53a6c452f2e","gatherdataeworld")
32e4c73ebdfed40a6ffd6f8fc11d86d7

Sm4CbcZero解密算法

方法签名:

/// author:姚鑫
/// date:2025-05-15
/// version:1.0
/// desc:JAVA SM4 Cbc Zero 解密
/// params:cipherText - 密文, keyStr - 密钥, ivStr - 向量, keyType - 密钥类型(默认text), outputFormat - 输出格式(默认hex)
/// return:明文
/// call:w ##class(Util.Impl.EncryptionUtils).JavaSm4CbcZeroDecrypt("32e4c73ebdfed40a6ffd6f8fc11d86d7","be82c53a6c452f2e","gatherdataeworld")
ClassMethod JavaSm4CbcZeroDecrypt(cipherText As %String, keyStr As %String, ivStr As %String, keyType As %String = "text", outputFormat As %String = "hex", url As %String = {..#StandardAlgUrl}) As %String

调用结果:

USER>w ##class(Util.Impl.EncryptionUtils).JavaSm4CbcZeroDecrypt("32e4c73ebdfed40a6ffd6f8fc11d86d7","be82c53a6c452f2e","gatherdataeworld")
1ab姚鑫@#!

Sm4EcbPkcs5加密算法

方法签名:

/// author:姚鑫
/// date:2025-05-15
/// version:1.0
/// desc:JAVA SM4 ECB Pkcs5 解密
/// params:cipherText - 密文, keyStr - 密钥, keyType - 密钥类型(默认text), outputFormat - 输出格式(默认hex)
/// return:密文
/// call:w ##class(Util.Impl.EncryptionUtils).JavaSm4EcbPkcs5Encrypt("1ab姚鑫@#!","975C7238C3824FB0")
ClassMethod JavaSm4EcbPkcs5Encrypt(plainText As %String, keyStr As %String, keyType As %String = "text", outputFormat As %String = "hex", url As %String = {..#StandardAlgUrl}) As %String

调用结果:

USER>w ##class(Util.Impl.EncryptionUtils).JavaSm4EcbPkcs5Encrypt("1ab姚鑫@#!","   975C7238C3824FB0")
7ad4159325eb143c2e7338cd42514ea3

Sm4EcbPkcs5解密算法

方法签名:

/// author:姚鑫
/// date:2025-05-15
/// version:1.0
/// desc:JAVA SM4 ECB Pkcs5 解密
/// params:cipherText - 密文, keyStr - 密钥, keyType - 密钥类型(默认text), outputFormat - 输出格式(默认hex)
/// return:明文
/// call:w ##class(Util.Impl.EncryptionUtils).JavaSm4EcbPkcs5Decrypt("7ad4159325eb143c2e7338cd42514ea3","975C7238C3824FB0")
ClassMethod JavaSm4EcbPkcs5Decrypt(cipherText As %String, keyStr As %String, keyType As %String = "text", outputFormat As %String = "hex", url As %String = {..#StandardAlgUrl}) As %String

调用结果:

USER>w ##class(Util.Impl.EncryptionUtils).JavaSm4EcbPkcs5Decrypt("7ad4159325eb143c2e7338cd42514ea3","975C7238C3824FB0")
1ab姚鑫@#!

问题相关

  • 如果出现以下图所示的错误,说明内容是从Word文档中复制的,复制过程中可能会带入Word的特殊符号。建议使用手动输入的方式进行操作,以避免此类问题。

http://hisui.cn/wp-content/uploads/2026/04/image9.png

  • 如果出现以下图所示的错误,可能是由于类文件中的IP端口配置不正确确保3.2步骤执行正确。请确认配置无误后,尝试在命令行控制台中使用telnet命令测试IP端口连接是否成功。

http://hisui.cn/wp-content/uploads/2026/04/image10.png
– 如果出现以下图所示的错误,请先确保Java服务是否启动成功。

http://hisui.cn/wp-content/uploads/2026/04/image11.png

  • 如果出现 \”Web server failed to start. Port 8087 was already in use.\” 错误提示,说明端口被占用。可以选择更换服务器,或停用占用该端口的进程,或者重启服务器。

  • 问:我们这边有多台ecp,是都要部署还是只部署其中一台就行了。答:一台,只要内网能访问的到稳定电脑或服务器都可以。

http://hisui.cn/wp-content/uploads/2026/04/image12.png

  • 问:我跑这个方法,返回跟文档不一样?答:请在terminal中执行。

http://hisui.cn/wp-content/uploads/2026/04/image13.png

上一篇:

这是一个默认的广告位。

Leave a comment

您的邮箱地址不会被公开。 必填项已用 * 标注

访问量: 850299