290 lines
10 KiB
XML
290 lines
10 KiB
XML
<?xml version="1.0" encoding="UTF-8" ?>
|
||
<packet extend="base">
|
||
<req>
|
||
|
||
<command>
|
||
<hex>SC</hex>
|
||
</command>
|
||
<data extend="data">
|
||
<deKeyIndex len="27" cn="解密密钥索引">
|
||
仅当存储类型为0时有效
|
||
内部密钥索引, 接口层对外限制8位,通讯层限制27位,16位机构号+3位密钥类型+8位密钥索引号。前19位补0。
|
||
注意:后八位密钥索引不允许输入全0
|
||
</deKeyIndex>
|
||
|
||
<algorithmKey len="2" cn="解密算法类型">
|
||
解密的算法
|
||
支持算法:3DES、AES、SM1、SM4
|
||
</algorithmKey>
|
||
|
||
<scatterAlgorithmVector :len="vectorLength()" :if="hasVector()" cn="解密初始向量">
|
||
仅当算法为非ECB模式下有此域
|
||
当算法标识为3DES-CBC、DES-CBC 时,该域为8B。
|
||
当算法标识为AES-CBC、SM1-CBC、SM4-CBC 时,该域为16B。
|
||
取值参考数据字典
|
||
</scatterAlgorithmVector>
|
||
|
||
<deKeyScatterLevel len="1" cn="解密密钥分散级数">
|
||
密钥分散级数,0~3
|
||
</deKeyScatterLevel>
|
||
|
||
<deScatterFactor1 len="16" :if="hasDeScatterFactor1()" cn="解密分散因子1">
|
||
仅当保护密钥分散级数不为0时存在
|
||
</deScatterFactor1>
|
||
|
||
<deScatterFactor2 len="16" :if="hasDeScatterFactor2()" cn="解密分散因子2">
|
||
仅当保护密钥分散级数不为0时存在
|
||
</deScatterFactor2>
|
||
|
||
<deScatterFactor3 len="16" :if="hasDeScatterFactor3()" cn="解密分散因子3">
|
||
仅当保护密钥分散级数不为0时存在
|
||
</deScatterFactor3>
|
||
|
||
<deScatterAlgorithmKey1 len="2" :if="hasDeScatterFactor1()" cn="解密分散算法标识1">
|
||
仅当保护密钥分散级数不为0时存在
|
||
分散算法标识,定义每一次分散的分散算法,数量与密钥分散级数一致
|
||
如果保护密钥算法类型为3DES、AES,则支持算法:3DES、AES;
|
||
如果保护密钥算法类型为SM1、SM4,则支持算法:SM1、SM4;
|
||
取值参考数据字典
|
||
</deScatterAlgorithmKey1>
|
||
|
||
<deScatterAlgorithmKey2 len="2" :if="hasDeScatterFactor2()" cn="解密分散算法标识2">
|
||
仅当分散级数不为0时存在,同上
|
||
</deScatterAlgorithmKey2>
|
||
|
||
<deScatterAlgorithmKey3 len="2" :if="hasDeScatterFactor3()" cn="解密分散算法标识3">
|
||
仅当分散级数不为0时存在,同上
|
||
</deScatterAlgorithmKey3>
|
||
|
||
<deScatterAlgorithmVector1 :len="vectorLen()" :if="hasDeScatterFactor1()" cn="解密分散算法的初始向量1">
|
||
仅当分散级数不为0时存在
|
||
分散算法的初始向量,定义每一次分散的分散算法的初始向量,数量与分散级数一致
|
||
即使对应分散算法模式为ECB,也需要填充0x00,
|
||
填充数量和CBC模式保持一致,
|
||
3DES-ECB、3DES-CBC、DES-ECB、DES-CBC 为16H
|
||
SM1-ECB、SM1-CBC、SM4-ECB、SM4-CBC、
|
||
AES-ECB、AES-CBC 为32H
|
||
</deScatterAlgorithmVector1>
|
||
|
||
<deScatterAlgorithmVector2 :len="vectorLen()" :if="hasDeScatterFactor2()" cn="解密分散算法的初始向量2">
|
||
仅当分散级数不为0时存在,同上
|
||
</deScatterAlgorithmVector2>
|
||
|
||
<deScatterAlgorithmVector3 :len="vectorLen()" :if="hasDeScatterFactor3()" cn="解密分散算法的初始向量3">
|
||
仅当分散级数不为0时存在,同上
|
||
</deScatterAlgorithmVector3>
|
||
|
||
<enKeyIndex len="27" cn="加密密钥索引">
|
||
仅当存储类型为0时有效
|
||
内部密钥索引, 接口层对外限制8位,通讯层限制27位,16位机构号+3位密钥类型+8位密钥索引号。前19位补0。
|
||
注意:后八位密钥索引不允许输入全0
|
||
</enKeyIndex>
|
||
|
||
<encryptAlgFlag len="2" cn="加密密钥算法">
|
||
加密密钥算法,支持3DES、AES、SM1、SM4
|
||
取值参考数据字典
|
||
</encryptAlgFlag>
|
||
|
||
<encryptIv :len="enVectorLength()" :if="hasEnVector()" cn="加密密钥IV">
|
||
仅当加密密钥算法为CBC模式时存在
|
||
加密密钥的初始向量
|
||
</encryptIv>
|
||
|
||
<enKeyScatterLevel len="1" cn="加密密钥分散级数">
|
||
密钥分散级数,0~3
|
||
</enKeyScatterLevel>
|
||
|
||
<enScatterFactor1 len="16" :if="hasEnScatterFactor1()" cn="加密分散因子1">
|
||
仅当保护密钥分散级数不为0时存在
|
||
</enScatterFactor1>
|
||
|
||
<enScatterFactor2 len="16" :if="hasEnScatterFactor2()" cn="加密分散因子2">
|
||
仅当保护密钥分散级数不为0时存在
|
||
</enScatterFactor2>
|
||
|
||
<enScatterFactor3 len="16" :if="hasEnScatterFactor3()" cn="加密分散因子3">
|
||
仅当保护密钥分散级数不为0时存在
|
||
</enScatterFactor3>
|
||
|
||
<enScatterAlgorithmKey1 len="2" :if="hasEnScatterFactor1()" cn="加密分散算法标识1">
|
||
仅当保护密钥分散级数不为0时存在
|
||
分散算法标识,定义每一次分散的分散算法,数量与密钥分散级数一致
|
||
如果保护密钥算法类型为3DES、AES,则支持算法:3DES、AES;
|
||
如果保护密钥算法类型为SM1、SM4,则支持算法:SM1、SM4;
|
||
取值参考数据字典
|
||
</enScatterAlgorithmKey1>
|
||
|
||
<enScatterAlgorithmKey2 len="2" :if="hasEnScatterFactor2()" cn="加密分散算法标识2">
|
||
仅当分散级数不为0时存在,同上
|
||
</enScatterAlgorithmKey2>
|
||
|
||
<enScatterAlgorithmKey3 len="2" :if="hasEnScatterFactor3()" cn="加密分散算法标识3">
|
||
仅当分散级数不为0时存在,同上
|
||
</enScatterAlgorithmKey3>
|
||
|
||
<enScatterAlgorithmVector1 :len="vectorLen()" :if="hasEnScatterFactor1()" cn="加密分散算法的初始向量1">
|
||
仅当分散级数不为0时存在
|
||
分散算法的初始向量,定义每一次分散的分散算法的初始向量,数量与分散级数一致
|
||
即使对应分散算法模式为ECB,也需要填充0x00,
|
||
填充数量和CBC模式保持一致,
|
||
3DES-ECB、3DES-CBC、DES-ECB、DES-CBC 为16H
|
||
SM1-ECB、SM1-CBC、SM4-ECB、SM4-CBC、
|
||
AES-ECB、AES-CBC 为32H
|
||
</enScatterAlgorithmVector1>
|
||
|
||
<enScatterAlgorithmVector2 :len="vectorLen()" :if="hasEnScatterFactor2()" cn="加密分散算法的初始向量2">
|
||
仅当分散级数不为0时存在,同上
|
||
</enScatterAlgorithmVector2>
|
||
|
||
<enScatterAlgorithmVector3 :len="vectorLen()" :if="hasEnScatterFactor3()" cn="加密分散算法的初始向量3">
|
||
仅当分散级数不为0时存在,同上
|
||
</enScatterAlgorithmVector3>
|
||
|
||
<inputDataLen len="4" :value="inputDataLen()" cn="输入数据长度">
|
||
待解密的数据长度
|
||
</inputDataLen>
|
||
|
||
<inputData cn="输入数据">
|
||
待解密的数据
|
||
</inputData>
|
||
</data>
|
||
|
||
</req>
|
||
<res>
|
||
|
||
<command>
|
||
<hex>SD</hex>
|
||
</command>
|
||
<data>
|
||
<error len="2" cn="错误代码" format="X" :catch="catchError('%s')">
|
||
<options>
|
||
<option cn="成功">
|
||
<hex>00</hex>
|
||
</option>
|
||
</options>
|
||
</error>
|
||
|
||
<infoLen len="4" cn="数据长度">
|
||
加密后的数据长度
|
||
</infoLen>
|
||
|
||
<info :len="getInfoLen()" cn="数据">
|
||
加密后的数据
|
||
</info>
|
||
</data>
|
||
|
||
</res>
|
||
<script>
|
||
|
||
function vectorLength(){
|
||
var algorithmKey = $packet.data.algorithmKey
|
||
if(6==algorithmKey || 8==algorithmKey ){
|
||
return 8;
|
||
}
|
||
if( 2==algorithmKey || 4==algorithmKey || 10==algorithmKey ){
|
||
return 16;
|
||
}
|
||
}
|
||
|
||
function hasVector(){
|
||
var algorithmKey = $packet.data.algorithmKey
|
||
if(2==algorithmKey || 4==algorithmKey || 10==algorithmKey || 6==algorithmKey || 8==algorithmKey){
|
||
return true;
|
||
}else{
|
||
return false;
|
||
}
|
||
}
|
||
|
||
function enVectorLength(){
|
||
var encryptAlgFlag = $packet.data.encryptAlgFlag
|
||
if(6==encryptAlgFlag || 8==encryptAlgFlag ){
|
||
return 8;
|
||
}
|
||
if( 2==encryptAlgFlag || 4==encryptAlgFlag || 10==encryptAlgFlag ){
|
||
return 16;
|
||
}
|
||
}
|
||
|
||
function hasEnVector(){
|
||
var encryptAlgFlag =$packet.data.encryptAlgFlag
|
||
if( 2==encryptAlgFlag || 4==encryptAlgFlag || 10==encryptAlgFlag || 6==encryptAlgFlag || 8==encryptAlgFlag){
|
||
return true;
|
||
}else{
|
||
return false;
|
||
}
|
||
}
|
||
|
||
function hasDeScatterFactor1(){
|
||
var deKeyScatterLevel = $packet.data.deKeyScatterLevel
|
||
if( 1 <= deKeyScatterLevel ){
|
||
return true;
|
||
}else{
|
||
return false;
|
||
}
|
||
}
|
||
|
||
function hasDeScatterFactor2(){
|
||
var deKeyScatterLevel = $packet.data.deKeyScatterLevel
|
||
if( 2 <= deKeyScatterLevel ){
|
||
return true;
|
||
}else{
|
||
return false;
|
||
}
|
||
}
|
||
|
||
function hasDeScatterFactor3(){
|
||
var deKeyScatterLevel = $packet.data.deKeyScatterLevel
|
||
if( 3 == deKeyScatterLevel){
|
||
return true;
|
||
}else{
|
||
return false;
|
||
}
|
||
}
|
||
|
||
function hasEnScatterFactor1(){
|
||
var enKeyScatterLevel = $packet.data.enKeyScatterLevel
|
||
if( 1 <= enKeyScatterLevel ){
|
||
return true;
|
||
}else{
|
||
return false;
|
||
}
|
||
}
|
||
|
||
function hasEnScatterFactor2(){
|
||
var enKeyScatterLevel = $packet.data.enKeyScatterLevel
|
||
if( 2 <= enKeyScatterLevel ){
|
||
return true;
|
||
}else{
|
||
return false;
|
||
}
|
||
}
|
||
|
||
function hasEnScatterFactor3(){
|
||
var enKeyScatterLevel = $packet.data.enKeyScatterLevel
|
||
if( 3 == enKeyScatterLevel){
|
||
return true;
|
||
}else{
|
||
return false;
|
||
}
|
||
}
|
||
|
||
function vectorLen(){
|
||
var algorithmKey = $packet.data.algorithmKey
|
||
if(5==algorithmKey || 6==algorithmKey || 7==algorithmKey || 8==algorithmKey ){
|
||
return 8;
|
||
}
|
||
if( 1==algorithmKey || 2==algorithmKey || 3==algorithmKey || 4==algorithmKey || 9==algorithmKey || 10==algorithmKey){
|
||
return 16;
|
||
}
|
||
}
|
||
|
||
function inputDataLen(){
|
||
var data = $packet.data;
|
||
return data.inputData.length;
|
||
}
|
||
|
||
function getInfoLen(){
|
||
return Util.a2i( $final.getSection('data').getSection('infoLen') )
|
||
}
|
||
</script>
|
||
</packet> |