查看: 210|回复: 2

[文章教程] ASP(VBScript)巧用CAPICOM实现真实随机数和常用加密方案

[复制链接]
xuanxiao 发表于 2023-4-17 23:11:21 | 显示全部楼层 |阅读模式
CAPICOM 版本 2.1.0.3 是 CAPICOM 的最新版本,CAPICOM 可用于对数据进行数字签名,检查、验证和显示他们的数字签名或数字证书,在证书存储中添加或删除证书,最后加密或解密数据。

如何让VBScript利用Windows原生自带的CAPICOM组件来实现随机数、Hash(MD5/SHA1)以及Base64算法,当然在VBScript的世界里,这些算法都有免组件的纯代码实现,当然使用组件的好处就是代码简洁和运行效率的提高,所以我们不妨尝试一下。

在包含CAPICOM特性代码部署到服务器上之前需要测试一下当前系统是否支持,如果不支持只有考虑.NET或者原生代码的实现了。

CAPICOM有很多对象(Objects),这里我也不一一介绍,主要关注的是 CAPICOM.Utilities 和 CAPICOM.HashedData 。

本文也是通过这两个对象实现所需要的算法功能的。

第一、实现随机数:
可能大家要问为什么VBScript语言自带随机数功能,我们还需要使用CAPICOM来生成随机数,实际上我们通过脚本语言生成的随机数是伪随机数,当然这些伪随机数可以应用于一些要求不高的场合,伪随机数是通过算法和数学运算生成的模拟随机数,对于加密这类应用来说这种随机数是不安全的,而真正的随机数是通过硬件噪音生成的,比如在Linux及其他类Unix系统下,可以通过 /dev/random 或者 /dev/urandom 获得,因为这里我们实现的系统是Windows,所以可以变通的通过CAPICOM获取。

方法的说明:
  1. Utilities.GetRandom( _
  2.   [ ByVal Length ], _
  3.   [ ByVal EncodingType ] _
  4. )
复制代码

长度 [in, 可选]
要创建的随机数的长度(以字节为单位)。 默认值为 8 个字节。

EncodingType [in, 可选]
CAPICOM_ENCODING_TYPE枚举的值,该值指示要用于生成的随机数的编码类型。 默认值为CAPICOM_ENCODE_BINARY。 此参数的取值可为下列值之一:
含义
CAPICOM_ENCODE_ANY仅当输入数据具有未知编码类型时,才使用此编码类型。 如果使用此值指定输出的编码类型,将改用CAPICOM_ENCODE_BASE64。 在 CAPICOM 2.0 中引入。
CAPICOM_ENCODE_BASE64数据保存为 base64 编码的字符串。
CAPICOM_ENCODE_BINARY数据保存为纯二进制序列。

枚举类型:
成员
说明
CAPICOM_ENCODE_ANY数据保存为 base64 编码的字符串或纯二进制序列。 此编码类型仅用于具有未知编码类型的输入数据。 在 CAPICOM 2.0 中引入。
0xffffffff
CAPICOM_ENCODE_BASE64数据保存为 base64 编码的字符串。
0
CAPICOM_ENCODE_BINARY数据保存为纯二进制序列。
1


注解
以下 CAPICOM 方法和属性使用此枚举类型:

Certificate.Export 方法
EncodedData.Value 属性
EncryptedData.Encrypt 方法
EnvelopedData.Encrypt 方法
ExtendedProperty.Value 属性
SignedData.Sign 方法
SignedData.CoSign 方法
Microsoft Store.Export 方法
Utilities.GetRandom 方法

实例:
  1. Function GetRandom(ByVal intLen,ByVal intType)
  2.   
  3.     Dim objCapiCom
  4.     Set objCapiCom = CreateObject("CAPICOM.Utilities.1")
  5.     GetRandom = objCapiCom.GetRandom(intLen, intType)
  6.     Set objCapiCom = Nothing

  7. End Function

  8. Response.Write GetRandom(10,0)
复制代码

 楼主| xuanxiao 发表于 2023-4-20 23:41:34 | 显示全部楼层
第二、快速实现Base64编码和解码

QQ截图20230420233802.png

222.png

CAPICOM_BASE64编码解码.asp (659 Bytes, 下载次数: 0, 售价: 10 个ASP币)
 楼主| xuanxiao 发表于 2023-4-21 23:41:42 | 显示全部楼层
三、对二进制文件进行Base64编解码,用到了 ByteArrayToBinaryString 和 BinaryStringToByteArray 方法
微信截图_20230421234051.png

微信截图_20230421234034.png

demo.ASP (917 Bytes, 下载次数: 0, 售价: 30 个ASP币)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表

在线客服

售前咨询
售后咨询
服务热线
023-58418553
微信公众号