完善RSA大数据数字信封
This commit is contained in:
+178
-178
@@ -1,229 +1,229 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<packet extend="base">
|
||||
<req>
|
||||
<req>
|
||||
|
||||
<command>
|
||||
<hex>6A</hex>
|
||||
</command>
|
||||
<data extend="data">
|
||||
<alg len="1" cn="算法标识">
|
||||
<options>
|
||||
<option cn="RSA2048_AES256_ECB">
|
||||
<hex>0</hex>
|
||||
</option>
|
||||
<option cn="SM2_SM4_ECB">
|
||||
<hex>1</hex>
|
||||
</option>
|
||||
<option cn="SM2_SM4_ECB 机构码|02|密钥">
|
||||
<hex>2</hex>
|
||||
</option>
|
||||
<option cn="PKCS7_SM2_SM4_ECB">
|
||||
<hex>3</hex>
|
||||
</option>
|
||||
<option cn="RSA2048_AES256_CBC">
|
||||
<hex>4</hex>
|
||||
</option>
|
||||
</options>
|
||||
</alg>
|
||||
<command>
|
||||
<hex>6A</hex>
|
||||
</command>
|
||||
<data extend="data">
|
||||
<alg len="1" cn="算法标识">
|
||||
<options>
|
||||
<option cn="RSA2048_AES256_ECB">
|
||||
<hex>0</hex>
|
||||
</option>
|
||||
<option cn="SM2_SM4_ECB">
|
||||
<hex>1</hex>
|
||||
</option>
|
||||
<option cn="SM2_SM4_ECB 机构码|02|密钥">
|
||||
<hex>2</hex>
|
||||
</option>
|
||||
<option cn="PKCS7_SM2_SM4_ECB">
|
||||
<hex>3</hex>
|
||||
</option>
|
||||
<option cn="RSA2048_AES256_CBC">
|
||||
<hex>4</hex>
|
||||
</option>
|
||||
</options>
|
||||
</alg>
|
||||
|
||||
<pFlag len="1" required="false" cn="P标志">
|
||||
可选,存在,则固定值为‘P’
|
||||
</pFlag>
|
||||
<pFlag len="1" required="false" cn="P标志">
|
||||
可选,存在,则固定值为‘P’
|
||||
</pFlag>
|
||||
|
||||
<certificateModel len="1" cn="证书模式">
|
||||
<options>
|
||||
<option cn="证书序号">
|
||||
<hex>0</hex>
|
||||
</option>
|
||||
<option cn="证书 DN">
|
||||
<hex>1</hex>
|
||||
</option>
|
||||
</options>
|
||||
</certificateModel>
|
||||
<certificateModel len="1" cn="证书模式">
|
||||
<options>
|
||||
<option cn="证书序号">
|
||||
<hex>0</hex>
|
||||
</option>
|
||||
<option cn="证书 DN">
|
||||
<hex>1</hex>
|
||||
</option>
|
||||
</options>
|
||||
</certificateModel>
|
||||
|
||||
|
||||
<certificateLen len="4" :value="certificateLen()" cn="证书内容长度">
|
||||
根据证书模式,需要输入内容项的长度 n
|
||||
</certificateLen>
|
||||
<certificateLen len="4" :value="certificateLen()" cn="证书内容长度">
|
||||
根据证书模式,需要输入内容项的长度 n
|
||||
</certificateLen>
|
||||
|
||||
|
||||
<certificateSn :len="strlen()" :if="0 == $packet.data.certificateModel$option" cn="X509 证书序号">
|
||||
可选项,只针对“证书模式”为 0时有。
|
||||
</certificateSn>
|
||||
<certificateSn :len="strlen()" :if="0 == $packet.data.certificateModel$option" cn="X509 证书序号">
|
||||
可选项,只针对“证书模式”为 0时有。
|
||||
</certificateSn>
|
||||
|
||||
<certificateDn :len="strlen()" :if="1 == $packet.data.certificateModel$option" cn="X509 证书的 subject">
|
||||
可选项,只针对“证书模式”为 1时有。
|
||||
</certificateDn>
|
||||
<certificateDn :len="strlen()" :if="1 == $packet.data.certificateModel$option" cn="X509 证书的 subject">
|
||||
可选项,只针对“证书模式”为 1时有。
|
||||
</certificateDn>
|
||||
|
||||
<orgDataLen len="4" :value="dataLen()" :if="3 == $packet.data.alg$option||4 == $packet.data.alg$option" cn="数据长度">
|
||||
只针对算法标识为3、4时传入
|
||||
</orgDataLen>
|
||||
<orgDataLen len="4" :value="dataLen()" :if="3 == $packet.data.alg$option||4 == $packet.data.alg$option" cn="数据长度">
|
||||
只针对算法标识为3、4时传入
|
||||
</orgDataLen>
|
||||
|
||||
<orgData :if="3 == $packet.data.alg$option||4== $packet.data.alg$option" cn="数据长度">
|
||||
只针对算法标识为3、4时传入
|
||||
</orgData>
|
||||
<orgData :if="3 == $packet.data.alg$option||4== $packet.data.alg$option" cn="数据长度">
|
||||
只针对算法标识为3、4时传入
|
||||
</orgData>
|
||||
|
||||
<keyType len="1" cn="加密密钥方案">
|
||||
LMK 下加密密钥的方案。
|
||||
</keyType>
|
||||
<keyType len="1" cn="加密密钥方案">
|
||||
LMK 下加密密钥的方案。
|
||||
</keyType>
|
||||
|
||||
<orgCodeLen len="2" :value="orgCodeLen()" :if="hasOrgCode()" cn="机构码长度">
|
||||
公钥加密的密钥格式3所需机构码长度,仅当格式3以及'P'存在时存在
|
||||
</orgCodeLen>
|
||||
<orgCodeLen len="2" :value="orgCodeLen()" :if="hasOrgCode()" cn="机构码长度">
|
||||
公钥加密的密钥格式3所需机构码长度,仅当格式3以及'P'存在时存在
|
||||
</orgCodeLen>
|
||||
|
||||
<orgCode :if="hasOrgCode()" cn="机构码长度">
|
||||
公钥加密的密钥格式3所需机构码长度,仅当格式3以及'P'存在时存在
|
||||
</orgCode>
|
||||
<orgCode :if="hasOrgCode()" cn="机构码长度">
|
||||
公钥加密的密钥格式3所需机构码长度,仅当格式3以及'P'存在时存在
|
||||
</orgCode>
|
||||
|
||||
<!-- 新增功能-->
|
||||
<pSignFlag len="1" required="false" cn="可选字段">
|
||||
签名数字信封标识符,存在则为P
|
||||
</pSignFlag>
|
||||
<!-- 新增功能-->
|
||||
<pSignFlag len="1" required="false" cn="可选字段">
|
||||
签名数字信封标识符,存在则为P
|
||||
</pSignFlag>
|
||||
|
||||
<signCertificateLen len="4" :value="signCertificateLen()" :if="hasOrgCN()" cn="签名证书DN长度">
|
||||
可选项,只针对"可选字段"为P时存在。
|
||||
</signCertificateLen>
|
||||
<signCertificateLen len="4" :value="signCertificateLen()" :if="hasOrgCN()" cn="签名证书DN长度">
|
||||
可选项,只针对"可选字段"为P时存在。
|
||||
</signCertificateLen>
|
||||
|
||||
<signCertificateDn :len="strlen()" :if="hasOrgCN()" cn="签名证书DN">
|
||||
可选项,只针对“证书模式”为1时有,只针对"可选字段"为P时存在。
|
||||
</signCertificateDn>
|
||||
<signCertificateModel len="1" :if="hasOrgCN()" cn="是否附带公钥信息">
|
||||
<options>
|
||||
<option cn="无需附带">
|
||||
<hex>0</hex>
|
||||
</option>
|
||||
<option cn="附带公钥信息">
|
||||
<hex>1</hex>
|
||||
</option>
|
||||
</options>
|
||||
</signCertificateModel>
|
||||
<signCertificateDn :len="strlen()" :if="hasOrgCN()" cn="签名证书DN">
|
||||
可选项,只针对“证书模式”为1时有,只针对"可选字段"为P时存在。
|
||||
</signCertificateDn>
|
||||
<signCertificateModel len="1" :if="hasOrgCN()" cn="是否附带公钥信息">
|
||||
<options>
|
||||
<option cn="无需附带">
|
||||
<hex>0</hex>
|
||||
</option>
|
||||
<option cn="附带公钥信息">
|
||||
<hex>1</hex>
|
||||
</option>
|
||||
</options>
|
||||
</signCertificateModel>
|
||||
|
||||
|
||||
<tailSep len="1" :if=" null != $packet.data.tail " cn="尾分隔">
|
||||
可选项。如果显示消息尾域,则该域必须显示。值为
|
||||
“X’19”。
|
||||
<hex>19</hex>
|
||||
</tailSep>
|
||||
<tailSep len="1" :if=" null != $packet.data.tail " cn="尾分隔">
|
||||
可选项。如果显示消息尾域,则该域必须显示。值为
|
||||
“X’19”。
|
||||
<hex>19</hex>
|
||||
</tailSep>
|
||||
|
||||
<tail maxLen="32" required="false" cn="尾部">
|
||||
可选项。最大长度为 32个字符。
|
||||
</tail>
|
||||
</data>
|
||||
<tail maxLen="32" required="false" cn="尾部">
|
||||
可选项。最大长度为 32个字符。
|
||||
</tail>
|
||||
</data>
|
||||
|
||||
</req>
|
||||
</req>
|
||||
|
||||
|
||||
<res>
|
||||
<command>
|
||||
<hex>6B</hex>
|
||||
</command>
|
||||
<data>
|
||||
<error len="2" cn="错误码" format="X" :catch="catchError('%s')">
|
||||
<options>
|
||||
<option cn="无错误">
|
||||
<hex>00</hex>
|
||||
</option>
|
||||
<option cn="公钥不符合编码规则">
|
||||
<hex>04</hex>
|
||||
</option>
|
||||
<option cn="无效的加密标识">
|
||||
<hex>06</hex>
|
||||
</option>
|
||||
<option cn="无效的附加模式标识">
|
||||
<hex>07</hex>
|
||||
</option>
|
||||
<option cn="密钥奇偶校验错误">
|
||||
<hex>10</hex>
|
||||
</option>
|
||||
<option cn="LMK 错误">
|
||||
LMK 错误;报告给管理员。
|
||||
<hex>13</hex>
|
||||
</option>
|
||||
<option cn="输入数据错">
|
||||
<hex>15</hex>
|
||||
</option>
|
||||
<option cn="DSP 错误">
|
||||
DSP 错误;报告给管理员。
|
||||
<hex>47</hex>
|
||||
</option>
|
||||
<option cn="密钥块长度错误">
|
||||
<hex>76</hex>
|
||||
</option>
|
||||
<option cn="输入数据长度错误">
|
||||
<hex>80</hex>
|
||||
</option>
|
||||
</options>
|
||||
</error>
|
||||
<res>
|
||||
<command>
|
||||
<hex>6B</hex>
|
||||
</command>
|
||||
<data>
|
||||
<error len="2" cn="错误码" format="X" :catch="catchError('%s')">
|
||||
<options>
|
||||
<option cn="无错误">
|
||||
<hex>00</hex>
|
||||
</option>
|
||||
<option cn="公钥不符合编码规则">
|
||||
<hex>04</hex>
|
||||
</option>
|
||||
<option cn="无效的加密标识">
|
||||
<hex>06</hex>
|
||||
</option>
|
||||
<option cn="无效的附加模式标识">
|
||||
<hex>07</hex>
|
||||
</option>
|
||||
<option cn="密钥奇偶校验错误">
|
||||
<hex>10</hex>
|
||||
</option>
|
||||
<option cn="LMK 错误">
|
||||
LMK 错误;报告给管理员。
|
||||
<hex>13</hex>
|
||||
</option>
|
||||
<option cn="输入数据错">
|
||||
<hex>15</hex>
|
||||
</option>
|
||||
<option cn="DSP 错误">
|
||||
DSP 错误;报告给管理员。
|
||||
<hex>47</hex>
|
||||
</option>
|
||||
<option cn="密钥块长度错误">
|
||||
<hex>76</hex>
|
||||
</option>
|
||||
<option cn="输入数据长度错误">
|
||||
<hex>80</hex>
|
||||
</option>
|
||||
</options>
|
||||
</error>
|
||||
|
||||
<keyLen len="4" cn="密钥密文长度">
|
||||
公钥加密的密钥密文长度
|
||||
</keyLen>
|
||||
<keyLen len="4" cn="密钥密文长度">
|
||||
公钥加密的密钥密文长度
|
||||
</keyLen>
|
||||
|
||||
<key :len="getKeyLen()" cn="密钥密文">
|
||||
公钥加密的密钥密文的 BASE64 编码
|
||||
</key>
|
||||
<key :len="getKeyLen()" cn="密钥密文">
|
||||
公钥加密的密钥密文的 BASE64 编码
|
||||
</key>
|
||||
|
||||
<lmkHead len="1" cn="lmk 头">
|
||||
如果是 'L' ,lmk 32 个字节长,否则 lmk 64 个字节长。
|
||||
</lmkHead>
|
||||
<lmkHead len="1" cn="lmk 头">
|
||||
如果是 'L' ,lmk 32 个字节长,否则 lmk 64 个字节长。
|
||||
</lmkHead>
|
||||
|
||||
<lmk :len="lmkLen()" cn="对称密钥的密文">
|
||||
对称密钥的密文,由 LMK30-31 保护。
|
||||
</lmk>
|
||||
<lmk :len="lmkLen()" cn="对称密钥的密文">
|
||||
对称密钥的密文,由 LMK30-31 保护。
|
||||
</lmk>
|
||||
|
||||
<keyCheck len="16" cn="密钥校验值">
|
||||
密钥校验值
|
||||
</keyCheck>
|
||||
<keyCheck len="16" cn="密钥校验值">
|
||||
密钥校验值
|
||||
</keyCheck>
|
||||
|
||||
<tailSep len="1" required="false" cn="尾分隔">
|
||||
可选项。如果显示消息尾域,则该域必须显示。值为 “X’19”。
|
||||
<hex>19</hex>
|
||||
</tailSep>
|
||||
<tailSep len="1" required="false" cn="尾分隔">
|
||||
可选项。如果显示消息尾域,则该域必须显示。值为 “X’19”。
|
||||
<hex>19</hex>
|
||||
</tailSep>
|
||||
|
||||
<tail maxLen="32" required="false" cn="尾部">
|
||||
可选项。最大长度为 32个字符。
|
||||
</tail>
|
||||
</data>
|
||||
<tail maxLen="32" required="false" cn="尾部">
|
||||
可选项。最大长度为 32个字符。
|
||||
</tail>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
</res>
|
||||
<script>
|
||||
</res>
|
||||
<script>
|
||||
function certificateLen(){
|
||||
var data = $packet.data;
|
||||
if( 0 == data.certificateModel$option ){
|
||||
return data.certificateSn.length
|
||||
}
|
||||
if( 1 == data.certificateModel$option ){
|
||||
return data.certificateDn.length
|
||||
}
|
||||
var data = $packet.data;
|
||||
if( 0 == data.certificateModel$option ){
|
||||
return data.certificateSn.length
|
||||
}
|
||||
if( 1 == data.certificateModel$option ){
|
||||
return data.certificateDn.length
|
||||
}
|
||||
}
|
||||
|
||||
function signCertificateLen(){
|
||||
var data = $packet.data;
|
||||
if( 'P' == $packet.data.pSignFlag ){
|
||||
return data.signCertificateDn.length
|
||||
}
|
||||
return null;
|
||||
var data = $packet.data;
|
||||
if( 'P' == $packet.data.pSignFlag ){
|
||||
return data.signCertificateDn.length
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
function getKeyLen() {
|
||||
return Util.a2i( $final.getSection('data').getSection('keyLen') );
|
||||
return Util.a2i( $final.getSection('data').getSection('keyLen') );
|
||||
}
|
||||
|
||||
function lmkLen() {
|
||||
if( Arrays.equals("L".getBytes(),
|
||||
$final.getSection('data').getSection('lmkHead').getValue()
|
||||
) ){
|
||||
return 64;
|
||||
}else{
|
||||
return 32;
|
||||
}
|
||||
if( Arrays.equals("L".getBytes(),
|
||||
$final.getSection('data').getSection('lmkHead').getValue()
|
||||
) ){
|
||||
return 64;
|
||||
}else{
|
||||
return 32;
|
||||
}
|
||||
}
|
||||
|
||||
function dataLen() {
|
||||
return $packet.data.orgData.length()
|
||||
return $packet.data.orgData.length
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,191 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<packet extend="base">
|
||||
<req>
|
||||
|
||||
<command>
|
||||
<hex>6B</hex>
|
||||
</command>
|
||||
<data extend="data">
|
||||
|
||||
<pFlag len="1" required="false" cn="P标志">
|
||||
可选,如果输入P代表使用PKCS7_SM2_SM4_ECB模式解密数字信封
|
||||
</pFlag>
|
||||
|
||||
<certificateModel len="1" cn="证书模式">
|
||||
<options>
|
||||
<option cn="证书序号">
|
||||
<hex>0</hex>
|
||||
</option>
|
||||
<option cn="证书 DN">
|
||||
<hex>1</hex>
|
||||
</option>
|
||||
</options>
|
||||
</certificateModel>
|
||||
|
||||
|
||||
<certificateLen len="4" :value="certificateLen()" cn="证书内容长度">
|
||||
根据证书模式,需要输入内容项的长度 n
|
||||
</certificateLen>
|
||||
|
||||
|
||||
<certificateSn :len="strlen()" :if="0 == $packet.data.certificateModel$option" cn="X509 证书序号">
|
||||
可选项,只针对“证书模式”为 0时有。
|
||||
</certificateSn>
|
||||
|
||||
<certificateDn :if="1 == $packet.data.certificateModel$option" cn="X509 证书的 subject">
|
||||
可选项,只针对“证书模式”为 1时有。
|
||||
</certificateDn>
|
||||
|
||||
<keyLen len="4" :value="keyLen()" cn="密钥密文长度">
|
||||
公钥加密的密钥密文长度
|
||||
</keyLen>
|
||||
|
||||
<key :len="getKeyLen()" cn="密钥密文">
|
||||
公钥加密的密钥密文的 BASE64 编码
|
||||
</key>
|
||||
|
||||
<keyType len="1" cn="加密密钥方案">
|
||||
LMK 下加密密钥的方案。
|
||||
</keyType>
|
||||
|
||||
<tailSep len="1" :if=" null != $packet.data.tail " cn="尾分隔">
|
||||
可选项。如果显示消息尾域,则该域必须显示。值为
|
||||
“X’19”。
|
||||
<hex>19</hex>
|
||||
</tailSep>
|
||||
|
||||
<tail maxLen="32" required="false" cn="尾部">
|
||||
可选项。最大长度为 32个字符。
|
||||
</tail>
|
||||
</data>
|
||||
|
||||
</req>
|
||||
<res>
|
||||
|
||||
<command>
|
||||
<hex>6C</hex>
|
||||
</command>
|
||||
<data>
|
||||
<error len="2" cn="错误码" format="X" :catch="catchError('%s')">
|
||||
<options>
|
||||
<option cn="无错误">
|
||||
<hex>00</hex>
|
||||
</option>
|
||||
<option cn="公钥不符合编码规则">
|
||||
<hex>04</hex>
|
||||
</option>
|
||||
<option cn="无效的加密标识">
|
||||
<hex>06</hex>
|
||||
</option>
|
||||
<option cn="无效的附加模式标识">
|
||||
<hex>07</hex>
|
||||
</option>
|
||||
<option cn="密钥奇偶校验错误">
|
||||
<hex>10</hex>
|
||||
</option>
|
||||
<option cn="LMK 错误">
|
||||
LMK 错误;报告给管理员。
|
||||
<hex>13</hex>
|
||||
</option>
|
||||
<option cn="输入数据错">
|
||||
<hex>15</hex>
|
||||
</option>
|
||||
<option cn="输入的数据格式错误">
|
||||
<hex>21</hex>
|
||||
</option>
|
||||
<option cn="DSP 错误">
|
||||
DSP 错误;报告给管理员。
|
||||
<hex>47</hex>
|
||||
</option>
|
||||
<option cn="密钥块长度错误">
|
||||
<hex>76</hex>
|
||||
</option>
|
||||
<option cn="输入数据长度错误">
|
||||
<hex>80</hex>
|
||||
</option>
|
||||
</options>
|
||||
</error>
|
||||
|
||||
<oDataLen len="4" cn="明文数据长度">
|
||||
明文原始数据长度(只针对P存在时,无P时为0)
|
||||
</oDataLen>
|
||||
|
||||
<oData :len="oDataLen()" cn="明文数据">
|
||||
原始数据(只针对P存在时,无P时不存在)
|
||||
</oData>
|
||||
|
||||
<!--<keyLen len="4" cn="密钥密文长度">-->
|
||||
<!--公钥加密的密钥密文长度-->
|
||||
<!--</keyLen>-->
|
||||
|
||||
<lmkHead len="1" cn="lmk 头">
|
||||
如果是 'L' ,lmk 32 个字节长,否则 lmk 64 个字节长。
|
||||
</lmkHead>
|
||||
|
||||
<lmk :len="lmkLen()" cn="对称密钥的密文">
|
||||
对称密钥的密文,由 LMK30-31 保护。
|
||||
</lmk>
|
||||
|
||||
<keyCheck len="16" cn="密钥校验值">
|
||||
密钥校验值
|
||||
</keyCheck>
|
||||
|
||||
<orgCodeLen len="4" cn="机构码长度">
|
||||
公钥加密的密钥格式3所需机构码长度,仅当格式3以及'P'存在时存在
|
||||
</orgCodeLen>
|
||||
|
||||
<orgCode :len="orgCodeLen()" cn="机构码长度">
|
||||
公钥加密的密钥格式3所需机构码长度,仅当格式3以及'P'存在时存在
|
||||
</orgCode>
|
||||
|
||||
<tailSep len="1" required="false" cn="尾分隔">
|
||||
可选项。如果显示消息尾域,则该域必须显示。值为 “X’19”。
|
||||
<hex>19</hex>
|
||||
</tailSep>
|
||||
|
||||
<tail maxLen="32" required="false" cn="尾部">
|
||||
可选项。最大长度为 32个字符。
|
||||
</tail>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
</res>
|
||||
<script>
|
||||
function certificateLen(){
|
||||
var data = $packet.data;
|
||||
if( 0 == data.certificateModel$option ){
|
||||
return data.certificateSn.length
|
||||
}
|
||||
if( 1 == data.certificateModel$option ){
|
||||
return data.certificateDn.length
|
||||
}
|
||||
}
|
||||
|
||||
function keyLen() {
|
||||
return $packet.data.key.length
|
||||
}
|
||||
|
||||
|
||||
function getKeyLen() {
|
||||
return Util.a2i( $final.getSection('data').getSection('keyLen') )
|
||||
}
|
||||
|
||||
function lmkLen() {
|
||||
if( Arrays.equals("L".getBytes(),
|
||||
$final.getSection('data').getSection('lmkHead').getValue()
|
||||
) ){
|
||||
return 64
|
||||
}else{
|
||||
return 32
|
||||
}
|
||||
}
|
||||
function orgCodeLen() {
|
||||
return Util.a2i( $final.getSection('data').getSection('orgCodeLen') )
|
||||
}
|
||||
|
||||
function oDataLen() {
|
||||
return Util.a2i( $final.getSection('data').getSection('oDataLen') )
|
||||
}
|
||||
</script>
|
||||
</packet>
|
||||
Reference in New Issue
Block a user