调用 Qc3EncryptData 时出现 CPF9DEC 错误

问题描述

我在调用 Qc3EncryptData 以使用三重 DES 加密数据时收到 CPF9DEC(加密服务提供程序无效)错误。我正在为这个“加密服务提供者”参数(参数 8)传递“0”的值。根据 IBM 文档(请参阅下面的链接),“0”值表示任何 CSP(系统将选择合适的 CSP 来执行加密操作)。知道如何通过此错误吗?

https://www.ibm.com/docs/en/i/7.4?topic=ssw_ibm_i_74/apis/qc3encdt.htm#algd0200

以下是我的代码的精简版:

  * algorithm DS                                       
 D ALGD0200...                                         
 D                 DS                  qualified       
 D  algorithm                    10i 0 inz(21)         
 D  algorithmBlockLen...                               
 D                               10i 0 inz(8)          
 D  mode                          1    inz('1')        
 D  padOption                     1    inz('2')        
 D  padChar                       1    inz(x'00')      
 D  reserved                      1    inz(x'00')      
 D  MACLen                       10i 0 inz(0)          
 D  keySize                      10i 0 inz(0)          
 D  inzVector                    32    inz('myvector') 
                                                       
  * key DS                                             
 D KEYD0200...                                         
 D                 DS                  qualified       
 D  keyType                      10i 0 inz(21)         
 D  keyLen                       10i 0 inz(24)         
 D  keyFormat                     1    inz('0')                        
 D  reserved                      3    inz(*allx'00')                  
 D  key                          32    inz('123456789012345678901234') 
                                                                       
  * error DS                                                           
 D reffldIBMErrorDS...                                                 
 D                 DS                  qualified template              
 D  totalLen                     10I 0 Inz(%size(reffldIBMErrorDS))    
 D  resultLen                    10I 0 inz(0)                          
 D  msgiD                         7A                                   
 D  reserved                      1A   inz(x'00')                      
 D  msgDta                      256A                                   
                                                                       
  * ibm encrypt api                                                    
 D Qc3EncryptData  PR                  extProc('Qc3DecryptData')       
 D  piClearData               65535A   options(*varsize) const         
 D  piClearDataLen...                                                  
 D                               10I 0 const                           
 D  piClearDataFormatName...                                           
 D                                8    const                    
                                                                
 D  piAlgorithm                  64A   const options(*varsize)  
 D  piAlgorithmFormat...                                        
 D                                8A   const                    
                                                                
 D  piKeyDesc                   512A   const options(*varsize)  
 D  piKeyFormat                   8A   const                    
 D  piCryptoServiceProvider...                                  
 D                                1A   Const                    
 D  piCryptoDeviceName...                                       
 D                               10A   Const options(*omit)     
 D  piEncData                 65535A   options(*varsize)        
 D  piEncDataSize                10I 0 const                    
 D  piEncDataLen                 10I 0                          
 D  piApiErrorDS                       likeds(reffldIBMErrorDS) 
 D                                     options(*varsize)        
                                                                
 D myClearData     s           3000    inz('Hello World')       
 D myEncData       s          65535A                            
 D myEncDataLen    s             10I 0                          
 D myIBMApiErr     ds                  likeDS(reffldIBMErrorDS) 
 D                                     inz(*likeds)             
                                                                
  /free                                                         
                                                                
                                                                
     // encrypt the data                                        
     Qc3EncryptData(myClearData  :%len(%trimr(myClearData))     
                   :'DATA0100'                                  
                   :ALGD0200         :'ALGD0200'                
                   :KEYD0200         :'KEYD0200'                
                   :'0'              :' '                       
                   :myEncData        :%size(myEncData)          
                   :myEncDataLen     :myIBMApiErr               
                   );                                           
                                                                
    *inlr = *on;                                                

  /end-free

解决方法

我发现了问题。在我的原型中,我将 extproc 作为 Qc3DecryptData。应该是 Qc3EncryptData

D Qc3EncryptData PR extProc('Qc3DecryptData')

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...