InterSystems 最佳实践之 掌握 %SYSTEM.Encryption 加密类
InterSystems IRIS对加密、解密和哈希操作有很好的支持。在%SYSTEM.Encryption(https://docs.intersystems.com/iris20212/csp/documatic/%25CSP.Documatic.c...)类中,有市场上主要算法的类方法。
IRIS算法和加密/解密类型
正如你所看到的,这些操作是基于密钥的,包括3个类:
- 对称密钥: 进行加密和解密操作的部分共享同一个秘密密钥。
- 非对称密钥: 进行加密和解密操作的部分共享相同的秘密密钥进行加密。然而,对于解密,每个部分都有一个私人密钥。这个密钥不能与其他人共享,因为它是一个身份证明。
- 哈希: 当你不需要解密,而只需要加密时使用。当涉及到存储用户密码时,这是一种常见的方法。
对称和非对称加密的区别
- 对称加密使用一个单一的密钥,需要在需要接收信息的人之间共享,而非对称加密在通信时使用一对公共密钥和一个私人密钥来加密和解密信息。
- 对称加密是比较老的技术,而非对称加密则相对较新。
- 非对称加密的出现是为了补充对称加密模式中需要共享密钥的固有问题,通过使用一对公共-私有密钥来消除共享密钥的需要。
- 非对称加密比对称加密花费的时间相对较多。
|
|
|
数据量 |
|
|
资源消耗 |
|
较高 |
密钥长度 |
|
|
安全性 |
由于使用单一密钥进行加密,安全性较低。 |
|
密钥数量 |
|
|
技术 |
|
|
|
|
|
速度 |
较快 |
|
算法 |
|
|
来源: https://www.ssl2buy.com/wiki/symmetric-vs-asymmetric-encryption-what-are-differences
使用 %SYSTEM.Encryption 类来实现加密、解密与哈希
要行使IRIS对加密、解密和哈希操作的支持,请访问https://github.com/yurimarx/cryptography-samples,并遵循以下步骤:
1. Clone/git 将 repo 拉入任何本地目录
$ git clone https://github.com/yurimarx/cryptography-samples.git
2. 在目录中打开 Docker 终端并执行:
$ docker-compose build
3. 启动 IRIS 容器:
$ docker-compose up -d
4. 打开 IRIS 终端:
$ docker-compose exec iris iris session iris -U IRISAPP IRISAPP>
5. 实现非对称RSA 加密:
IRISAPP>Set ciphertext = ##class(dc.cryptosamples.Samples).DoRSAEncrypt("InterSystems") IRISAPP>Write ciphertext Ms/eR7pPmE39KBJu75EOYIxpFEd7qqoji61EfahJE1r9mGZX1NYuw5i2cPS5YwE3Aw6vPAeiEKXF rYW++WtzMeRIRdCMbLG9PrCHD3iQHfZobBnuzx/JMXVc6a4TssbY9gk7qJ5BmlqRTU8zNJiiVmd8 pCFpJgwKzKkNrIgaQn48EgnwblmVkxSFnF2jwXpBt/naNudBguFUBthef2wfULl4uY00aZzHHNxA bi15mzTdlSJu1vRtCQaEahng9ug7BZ6dyWCHOv74O/L5NEHI+jU+kHQeF2DJneE2yWNESzqhSECa ZbRjjxNxiRn/HVAKyZdAjkGQVKUkyG8vjnc3Jw==
6. 实现非对称 RSA 解密:
IRISAPP>Set plaintext = ##class(dc.cryptosamples.Samples).DoRSADecrypt(ciphertext) IRISAPP>Write plaintext InterSystems
7. 实现对称 AES CBC 加密:
IRISAPP>Do ##class(dc.cryptosamples.Samples).DoAESCBCEncrypt("InterSystems") 8sGVUikDZaJF+Z9UljFVAA==
8. 实现对称AES CBC 解密:
IRISAPP>Do ##class(dc.cryptosamples.Samples).DoAESCBCDecrypt("8sGVUikDZaJF+Z9UljFVAA==") InterSystems
9. 实现MD5 哈希:
IRISAPP>Do ##class(dc.cryptosamples.Samples).DoHash("InterSystems") rOs6HXfrnbEY5+JBdUJ8hw==
10. 实现SHA 推荐哈希:
IRISAPP>Do ##class(dc.cryptosamples.Samples).DoSHAHash("InterSystems") +X0hDlyoViPlWOm/825KvN3rRKB5cTU5EQTDLvPWM+E=
11. 退出终端:
Enter HALT or H (大小写不敏感)
关于源代码
1. 关于对称密钥
在Dockerfile创建了一个环境密钥,作为对称操作的秘钥。
2. 关于非对称密钥
# to use with asymmetric encrypt/decrypt
RUN openssl req -new -x509 -sha256 -config example-com.conf -newkey rsa:2048 -nodes -keyout example-com.key.pem -days 365 -out example-com.cert.pem
|
在Dockerfile创建了一个公钥和一个私钥用作非对称操作
3. 对称加密
AES CBC 加密主要用于加密文本。
Base64编码将结果作为一个可读的文本返回给用户。.
4. 对称解密
AES CBC 解密用于解密文本.
Base64解码将加密后的文本返回为二进制文本,可以用来解密。
5. 非对称加密
必须获得公钥文件内容,用RSA进行加密。
RSA加密是用来加密文本的。
6. 非对称解密
要想用RSA解密,必须得到私钥文件内容。
RSA解密的操作来解密文本。
7. 使用MD5的哈希文本(老方法)
MD5 哈希加密文本,并且不能被解密Hash will encrypt the text, and it will not be possible to decrypt it.
新项目不建议使用MD5的哈希值,因为它被认为是不安全的。这就是为什么它被SHA所取代。InterSystems的IRIS支持SHA(我们的下一个例子将演示它)。
8. 使用SHA的Hash文本 (推荐)
我们将在这个样本中使用SHA-3哈希方法。根据InterSystems公司的文档,该方法使用美国安全哈希算法-3之一生成哈希值((更多信息见联邦信息处理标准出版物202)。
对于SHA方法,可以设置哈希操作中使用的比特长度。位数越多,破解哈希就越困难。然而,哈希过程也会变慢。在这个例子中,我们使用了256位。你可以选择以下长度:
- 224 (SHA-224)
- 256 (SHA-256)
- 384 (SHA-384)
- 512 (SHA-512)