当前位置: 首页 > 服务器 > IBM > IBM软件 > 使用IBM i加密服务让应用程序更安全

使用IBM i加密服务让应用程序更安全

2012-06-29 18:33 来源:风信网 作者:末信 人气指数: 我要评论

IBM i 自 5.3 版本开始在操作系统级别提供加密服务编程接口 (API), 您只要拥有 IBM i 5.3 以上版本操作系统,就可以使用使用这些 API, 无需购买额外的软件和硬件。加密服务 API 提供以下功能:

  • 数据私密性 - 数据私密性通过对数据加密来实现,数据加密的过程是对明文数据使用加密算法得到密文数据,必须拥有特定知识(通常是秘钥)才可以理解密文(即将密文还原为明文)。加密后的数据对于不拥有秘钥的人是保密的。
  • 数据完整性 - 数据完整性即提供检测数据是否被篡改的能力,实现方式是通过计算验证码来检测数据是否被篡改,验证码是对原始数据使用哈希函数计算得到的哈希值。
  • 通信多方认证 - 在多方通信系统中,通信的每一方可以确认另一方的身份。
  • 不可抵赖性 – 即可以通过消息的某些特征来确认消息的签署者,当消息签署者对一条消息签名后,不可以否认对该消息进行过签名,通常使用数字签名来实现。

IBM i 加密服务提供众多 API 帮助您的应用程序实现以上各种功能或功能组合,以增强应用程序的安全性。另外 IBM i 在 5.4 和 6.1 版本在加密服务中提供了密钥管理 API 及图形界面。 本文将以在应用程序中实现 AES 加解密为例来说明如何使用 IBM i 加密服务 API 及密钥管理功能。

让我们先通过一段 C 语言程序实例来看一下如何在程序中使用加密服务 API,该程序先使用指定密钥对一段明文采用 AES 算法进行加密,然后再对加密后的密文进行解密。本文假定读者已经对 IBM i 上的 C 语言编程有基本的了解。

清单 1. 在程序中使用加密服务 API

				  
 #include <stdio.h> 
 #include <string.h> 
 #include <stdlib.h> 
 
 #include <qusec.h>     /* Error code 结构 */ 
 #include <qc3encdt.h> /* QC3ENCDT API */ 
 #include <qc3decdt.h> /* QC3DECDT API */ 

 int main(int argc, char* argv[]) { 
 char clearData[20]; /* 明文缓冲区 */ 
 int lenOfClearData = sizeof(clearData); 
 Qc3_Format_ALGD0200_T algDesc; 
 Qc3_Format_KEYD0200_T* pKey; 
 char csp = '0'; 
 int lenOfReturnedCipher; 
 int lenOfReturnedClear; 
 char cipherData[32]; /* 密文缓冲区 */ 
 int lenOfCipher = sizeof(cipherData); 
 int lenOfKey = 16; /* 密钥长度 ( 单位为字节 ) */ 
 Qus_EC_t errorCode; 

 /* 设置明文内容 */ 
 memcpy(clearData, "01234567890123456789", sizeof(clearData)); 
 
 /* 设置密钥内容 */ 
 pKey = (Qc3_Format_KEYD0200_T*) malloc ( sizeof ( Qc3_Format_KEYD0200_T ) 
 + lenOfKey); /* 结构体长度不包含密钥内容 */ 
 pKey->Key_Type = Qc3_AES;         /* AES 密钥 */ 
 pKey->Key_String_Len = lenOfKey; 
 pKey->Key_Format = '0';            /* 密钥内容格式 , '0'代表二进制 */ 
 memcpy((void*)(pKey + sizeof(Qc3_Format_KEYD0200_T)), 
  "testKeyString123", lenOfKey); /* 密钥内容放在结构后面 */ 

 /* 设置算法参数 */ 
  algDesc.Block_Cipher_Alg = Qc3_AES;/* 使用 AES,AES 是一种块加密算法 */ 
 algDesc.Block_Length = 16; /* 加密块长度 , 支持 , 24, 32 三种长度 */ 
 algDesc.Mode = Qc3_CBC; /* 块之间的运算模式 , 这里指定 CBC 模式 */ 
 algDesc.Pad_Option = Qc3_Pad_Char; /* 填充方式 , 最后一个块小于指定块长度时 , 填充补齐 */ 
 algDesc.Pad_Character ='0'; /* 填充字符 */ 
 algDesc.Reserved = 0;        /* 保留 */ 
 algDesc.MAC_Length = 0;      /* MAC 长度 , AES 时置 */ 
 algDesc.Effective_Key_Size= 0; /* 仅对 RC2 有效 , AES 时置 */ 
 
 /* 初始化密文缓冲区 */ 
  memset(cipherData, 0, lenOfCipher); 
  
 /* 初始化 Error Code 结构 */ 
 memset(&errorCode, 0, sizeof(Qus_EC_t)); 
 errorCode.Bytes_Provided = sizeof(Qus_EC_t); 
     
  /* 调用加密函数 */ 
  Qc3EncryptData (clearData, /* 明文 */ 
     &lenOfClearData, /* 明文长度 */ 
    "DATA0100",       /* 明文格式 */ 
    (char*)&algDesc, /* 算法描述 */ 
    "ALGD0200",       /* 算法描述格式名 */ 
    (void*)pKey,      /* 密钥信息结构 */ 
    "KEYD0200",       /* 密钥信息结构名 */ 
    &csp,              /* 加密服务提供者 , 指定'0'表示由系统选择 */ 
     NULL,              /* 加密服务设备名 */ 
    cipherData,       /* 密文缓冲区 , 用于返回密文 */ 
     &lenOfCipher,     /* 密文缓冲区长度 */ 
    &lenOfReturnedCipher, /* 返回密文长度 */ 
    &errorCode); /* 错误码 */ 
    if(errorCode.Bytes_Available) { /* 调用失败 */ 
    printf("QC3ENCDT error:Exception_Id:[%s]\n", errorCode.Exception_Id); 
    return -1; 
   } 
  
   /* 清除明文缓冲区 */ 
   memset(clearData, 0, sizeof(clearData)); 
  
  /* 初始化 Error Code 结构 */ 
   memset(&errorCode, 0, sizeof(Qus_EC_t)); 
   errorCode.Bytes_Provided = sizeof(Qus_EC_t); 
  /* 调用解密函数参数与加密类似 */ 
  Qc3DecryptData (cipherData, 
      &lenOfReturnedCipher, 
      (char*)&algDesc, 
      "ALGD0200", 
      (void*)pKey, 
      "KEYD0200", 
       &csp, 
       NULL, 
      clearData, 
      &lenOfCipher, 
      &lenOfReturnedClear, 
      &errorCode); 
     if(errorCode.Bytes_Available) { /* 调用失败 */ 
       printf("QC3DECDT error: Exception_Id:[%s]\n", errorCode.Exception_Id); 
      return -1; 
       } 
     return 0;   } 

IBM i 加密服务提供多种加解密函数的实现,包括块模式对称密钥算法 DES, 3-DES, AES, RC2, 流模式对称密钥算法 RC4, 以及非对称密钥算法 RSA,并且提供了统一的 API Qc3EncryptData。用户可以使用 Qc3EncryptData 通过参数设置调用以上各种加密算法。

在代码清单 1 中,第 10 行至第 47 行是为了调用 Qc3EncryptData 准备各个参数,包括明文内容,密钥内容,采用的算法及算法的各种参数,对于 AES 算法来说,块长度、块模式、填充方式和填充字符都会影响到最后的加密结果即密文内容,但不会影响加密的正确性。也就是说,不管这些参数怎么设置,对于得到的结果再用同样的参数对密文进行解密,会得到相同的加密前的明文。

为您推荐: 安全 IBM 程序 加密服务
大家感兴趣的内容
小伙伴最爱的新闻
小伙伴还关注了以下信息
小伙伴关注的焦点

小伙伴都在关注的热门词

芈月传 老司机玩法 萌乐网 黑科技 坐骑揭秘 三国令 铁血皇城 竞技场攻略 书剑恩仇录 披风玩法 装备强化攻略 野外BOSS玩法 全网曝光 赤壁传说 半回合制国 ACT 哥们网 天书世界 奇珍商城 热血战歌 传奇宝藏抽奖 门徒 范伟打天下 打开方式 门徒获取玩法 三大萌宠简介 新手攻略 挂机系统简介 材料副本 大海战 鸵鸟 大黑 激情玩法 门徒战力提升 万世 强化属性 上古降魔 提升战力 装备攻略 九阴绝学 品质推荐 老干妈 激战来袭 大黑游戏 新服亮点 福利多多 画江山 资料片 玩家 九阴真经 江湖儿女 真实场景 现实 虚拟 随机副本 风色轨迹 听天由命 ppwan 神助攻 武林秘药 激活八大脉门 九天劫变 猎命格 天问 大型PVP 花千骨 激战更尽兴 网易mumu 手游玩家 安卓模拟器 安卓 单挑群战 武侠传说 女神 孙尚香专访 胸猛抱团 新游 占山为王 跨服城战 蜀山战纪 剑雨江湖 攻略 实时VR交互 七大女神代言 酷炫走江湖 世界四大杀手 玩家专访 三国经典 大制作 好玩网页游戏 盘点 宇宙霸主 境界玩法 莽荒纪 勇闯难关 镜像副本 荒漠霸主 装备精通 三大战役 鹌小彦奇谈