使用BlackBerry Transcoder API集成第三方加密方案(一)
来源:互联网 发布:万能淘宝店名怎么取 编辑:程序博客网 时间:2024/05/09 09:01
作者: 邓明轩
BlackBerry 平台的加密机制
BlackBerry 平台自身带有完整的加密机制。所有数据从 BES(BlackBerry Enterprise Server)流 出前都做了加密处理,使用的是 AES 或者是 Triple-DES 的方式进行加密。在数据到达 BlackBerry 智能手机后手机端平台会对数据进行解密操作。同样,当数据从 BlackBerry 智能 手机流向服务器端时也通过 AES 或者是 Triple-DES 方式进行加解密操作。也就是说,在 BlackBerry 平台上,从 BES 服务器端到 BlackBerry 智能手机端都是受平台的加密保护的。其 架构如下图:
达 BlackBerry 智能手机之前都无法被正常读取,从而达到保护传输数据的目的。在 BlackBerry 智能手机接收到服务器端发送的数据后,首先会根据管理员指定的解密方法对数据进行解密 操作,然后将数据以明文形式传递给手机应用程序。如上所述,当数据从 BlackBerry 智能手 机端提交给服务器时 BlackBerry 会以相类似的过程对数据进行加解密操作,从而保证数据从 手机端提交到服务器端时也受保护。 然而,对于很多企业和组织而言,单纯使用厂商提供的密钥和加密机制是不够的,他们必须 使用自己提供的加密密钥,或者更进一步,要求使用自身研发的或者是指定安全提供商研发 的加密机制。在这种情况下就需要在 BlackBerry 平台上加入额外的加密机制。 如果企业只是对邮件有额外的加密要求,同时可以接受标准的加密算法,则可以通过 S/MIME
加密机制的配置形成额外的加密机制。BlackBerry 平台支持 S/MIME 标准,可以在 BES 服务 器端配置 LDAP 连接以查找密钥,然后在 BlackBerry 智能设备上引入用户的密钥,从而形成 完整的加密/签名机制。在这种配置下,服务器端和 BlackBerry 智能手机端都可以使用企业 自身提供的加密密钥。不过,通过 S/MIME 配置额外的加密机制只作用于邮件,后台企业应 用通过 BES 推送到 BlackBerry 手机端的数据是不受二次加密保护的,同样,BlackBerry 智能 手机端应用提交到服务器的应用数据也是不受二次加密保护的。如果希望对邮件数据和应用 数据都实现二次加密,则需要使用 BlackBerry 平台上的 Transcoder API。本章节将详细介绍 Transcoder API,包括 Transcoder API 的接口和相关的代码实现。如果希望了解 S/MIME 的配 置过程,请参考相关文档,本章节不对 S/MIME 的配置做详细介绍。
Transcoder API 的整体结构
Transcoder API 在 BlackBerry 平台上提供了二次加密方法,其基本思路是在 BES 服务器端和 BlackBerry 智能手机端都预留接口,让开发人员可以在服务器端和 BlackBerry 智能手机端部 署加解密应用,从而对所有传输的数据进行二次加密。其架构示意图如下:
示意图中红线部分同样表示 BlackBerry 平台加密的数据,橙线部分表示使用 Transcoder 加密 接口进行加密的数据通道,字符串“Test…”表示明文,字符串“Uftu…”表示通过 Transcoder 加密接口加密过后数据,字符串“%^$(*…”表示 BES 加密后的数据。可以看到在数据离开
BES 服务器后,它同时受到 BlackBerry 平台加密和 Transcoder 加密接口加密两层保护,这就 形成了数据的二次加密。
使用 Transcoder API 进行二次加密的关键是在服务器和智能手机两端加入了额外的加解密程 序。
服务器端在使用 BlackBerry 平台提供的加密方法对数据进行加密前会调用服务器端加解密 程序,将所有数据提交给服务器端加解密程序。此时服务器端加解密程序的任务就是通过特 定的加密算法对传入的数据进行加密,加密后返还给 BES 服务器。BES 服务器在收到服务器 端加解密应用所加密的数据后,会使用 BlackBerry 平台的加密方法对数据进行再一次加密, 然后才将数据发送到网络上传送给智能手机端。
智能手机端在接收到 BES 服务器传送的数据后,首先使用 BlackBerry 平台的解密方法对数据 进行解密。解密后再调用手机端加解密应用,将数据传递给手机端加解密应用。此时的数据 正是服务器端加解密应用加密过的数据。手机端加解密应用需要使用对应的解密算法对数据 进行解密,最终得到明文,将明文传递给手机应用。
从智能手机提交数据到 BES 服务器也通过类似的过程对数据进行两次加解密处理。 从以上描述不难发现,在实现二次加密过程服务器端和手机端的加解密程序必须对应,服务 器端加解密应用使用某一种加密算法和密钥,手机端加解密应用必须使用对应的解密算法和 密钥。否则会出现一端无法解密数据导致应用处理错误的问题。
所以,通过 Transcoder API 实现二次加密的关键在于如何开发和部署服务器端和手机端的加 解密应用。在下面的章节中我们会介绍接口的详细情况和开发过程。
服务器端 Transcoder API 介绍
服务器端的 Transcoder API 是以 c/c++头文件形式提供的,名为:“BESTranscoderAPI.h”开发 人员需要通过 c/c++开发工具将“BESTranscoderAPI.h”文件引入项目中,使用 c 语言对指定 方法进行实现,最终通过 c/c++编译工具形成一个 dll 文件。 当开发人员部署所开发的服务器端加解密应用时需要将所生成的 dll 文件拷贝到 BES 服务器
上 , 并 通 过 注 册 表 “ HKEY_LOCAL_MACHINE/SOFTWARE/Research In Motion/BlackBerry
Enterprise Server/Dispatcher/Transcoder”指向 dll 文件所在的位置。
通过这样的配置,在 BES 服务器启动的时候会根据注册表找到开发人员所开发的 dll 文件并 调入内存。在 BES 服务器需要对数据进行处理时会调用 dll 内的方法,由开发人员所实现的 加解密方法对数据进行处理。
下面详细描述 BESTranscoderAPI.h 为服务器端 dll 程序定义的函数
函数: LoadDLL()
该函数在 BES 服务器加载这个 dll 时被调用,开发人员可以在这个函数中实现加解密程序所 需要的初始化代码。
函数定义:
int __cdecl LoadDLL()
参数: 无
返回值:
返回 0 表示加载成功,返回其它值表示加载失败,该函数的返回值由开发人员指定,用于告
诉 BES 服务器本 dll 是否成功加载了相关内容。
函数: FreeDLL()
该函数在 BES 服务器释放该 dll 时被调用,开发人员可以在这个函数中加入对象释放等资源 回收代码。
函数定义:
void FreeDLL()
参数: 无
返回值: 无
函数: GetID()
该函数用于返回服务器端加解密应用程序的 ID,这个函数的返回值作为该应用的标记,所 以它必须和客户端的对应 getID 方法返回相同的值,让 BlackBerry 平台可以找到对应的解密 应用。
函数定义:
unsigned char __cdecl GetId()
参数: 无
返回值:
返回一个 unsigned char 类型的值,不能为 0,开发人员可以根据约定任意指定一个非 0 的
unsigned char 值,前提就是服务器端返回的 ID 值和客户端返回的 ID 值相同。
函数: WillTranscode()
该函数让 dll 决定是否对相应的内容进行加解密处理。 函数定义:
int __cdecl WillTranscode(const TranscoderContext *const context)
参数:
context 用于获取传入的内容的上下文,从而判断是否需要对其进行加密。 返回值:
当该函数返回 0 时表明需要对内容进行加解密处理,返回其它非 0 值则表明不需要对内容进 行加解密处理。值-1 为保留字 TRANSCODE_ERROR ,在这里不能作为返回值使用。
函数: Encode()
该函数用于对数据进行加密,BES 服务器在发送数据前会调用这个方法,开发人员需要在这 个函数中实现加密算法。
函数定义:
int __cdecl Encode( TranscoderInputStream *const input, TranscoderOutputStream *const output, const TranscoderContext *const context)
参数:
input 为 BES 服务器传入的内容,开发人员可以从中读取消息内容
output 为传给 BES 服务器的内容,开发人员需要将加密过的数据写入该参数中
context 消息上下文,用于获取消息内容主体以外的其它相关信息。 返回值:
当该函数返回 0 时表明加密成功,返回其它非 0 值则表明加密不成功。注意,如果该函数返
回非 0 值则传入的内容会被丢失。值-1 为保留字 TRANSCODE_ERROR ,在这里不能作为返 回值使用。
函数: Decode()
该函数用于对数据进行解密,BES 服务器在接收到数据后会调用这个方法,开发人员需要在 这个函数中实现解密算法。
函数定义:
int __cdecl Decode( TranscoderInputStream *const input, TranscoderOutputStream *const output, const TranscoderContext *const context)
参数:
input 为 BES 服务器传入的内容,开发人员可以从中读取消息内容
output 为传给 BES 服务器的内容,开发人员需要将解密过的数据写入该参数中
context 消息上下文,用于获取消息内容主体以外的其它相关信息。 返回值:
当该函数返回 0 时表明解密成功,返回其它非 0 值则表明解密不成功。注意,如果该函数返 回非 0 值则传入的内容会被丢失。值-1 为保留字 TRANSCODE_ERROR ,在这里不能作为返 回值使用。
手机端 Transcoder API 介绍
手机端 Transcoder API 以 java 类的形式提供,主要的类名为“net.rim.device.api.crypto. transcoder.Transcoder”。开发人员需要继续这个类,并实现其中指定的方法。另外,为了让 开发人员所开发的类生效,需要调用“net.rim.device.api.crypto.transcoder.TranscoderManager” 类的 register 方法注册所开发的 Transcoder 子类。最后,开发人员通 BlackBerry 开发工具生 成一个可以在 BlackBerry 智能手机上运行的程序。因为手机端的加解密程序需要对所有数据 进行处理,一般这个应用会设置为自启动的应用。 在部署手机端加解密应用的时候,需要将所生成的手机应用安装到手机设备上。如果该程序 被设置为自启动应用,BlackBerry 智能手机会自动将该程序载入内存。当需要对数据进行处 理的时候,会调用该程序特定的方法,由该方法对数据进行处理。
继承法 Transcoder 类后所需要实现的函数有:
函数:getID()
用于获取客户端应用的 ID,开发人员可以在该函数中返回 0 以外的任意 byte 类型的值,前 提是返回值必须和服务器端应用 GetID 函数的返回值相同。
函数定义:
public final byte getID()
参数: 无
返回值:
该方法返回一个 byte 类型的值作为客户端应用的 ID,如上所述,这里返回的 ID 必须和服务 器端应用 GetID 方法返回的值相同。
函数:willTranscode()
该函数让开发人员判断是否需要对传入的内容进行加解密处理。它的作用主要是过滤那些不 需要加解密操作的消息。
函数定义:
public boolean willTranscode(IntHashtable context)
参数:
context 用于获取传入的内容的上下文,从而判断是否需要对其进行加密。 返回值:
返回 true 表示需要对内容进行加解密处理,返回 false 表示不需要对内容进行加解密处理。
函数: encode()
该函数用于对数据进行加密,BlackBerry 智能手机在发送数据前会调用这个方法,开发人员 需要在这个函数中实现加密算法。
函数定义:
public boolean encode( InputStream input, OutputStream output, IntHashtable context)
参数:
input 为 BlackBerry 智能手机传入的内容,开发人员可以从中读取消息内容
output 为 BlackBerry 智能手机的内容,开发人员需要将加密过的数据写入该参数中
context 消息上下文,用于获取消息内容主体以外的其它相关信息。 返回值:
当该函数返回 true 时表明加密成功,返回 false 则表明加密不成功。注意,如果该函数返回
非 0 值则传入的内容会被丢失。值-1 为保留字 TRANSCODE_ERROR ,在这里不能作为返回 值使用。
函数: decode()
该函数用于对数据进行解密,BlackBerry 智能手机在接收到数据后会调用这个方法,开发人 员需要在这个函数中实现解密算法。
函数定义:
public boolean decode( InputStream input, OutputStream output, IntHashtable context)
参数:
input 为 BlackBerry 智能手机传入的内容,开发人员可以从中读取消息内容
output 为传给 BlackBerry 智能手机的内容,开发人员需要将解密过的数据写入该参数中
context 消息上下文,用于获取消息内容主体以外的其它相关信息。 返回值:
当该函数返回 true 时表明解密成功,返回 false 则表明多彩密不成功。
BlackBerry SDK下载
相关链接:
使用BlackBerry Transcoder API集成第三方加密方案(一)
使用BlackBerry Transcoder API集成第三方加密方案(二)
使用BlackBerry Transcoder API集成第三方加密方案(三)
- 使用BlackBerry Transcoder API集成第三方加密方案(一)
- 使用BlackBerry Transcoder API集成第三方加密方案(二)
- 使用BlackBerry Transcoder API集成第三方加密方案(三)
- 第三方API使用方案
- Android使用官方API分享内容到QQ和微信(非第三方集成)
- Blackberry 上如何使用第三方 Library (jar)
- 毕业设计使用第三方api
- Django使用第三方接口(一)
- 支付宝的集成与使用(第三方)
- iOS集成第三方登录的使用
- BlackBerry PlayBook上的设备集成(一)
- 教你如何自己制作IP地址查询的API,摆脱第三方API---(一)
- 即时通信(集成第三方)
- 集成通讯录(第三方框架RHAddressBook)
- 第三方支付集成
- 第三方支付集成
- BlackBerry平台加密安全机制(Crypto API)
- 系统集成方案(一).NET集成方案
- connectify
- 过程改进日记之学习Scrum2010-9-10:Sprint3之前的讨论-对话老大
- 周末的郁闷事儿
- 【免费】TUP 第五期移动开发技术沙龙火热报名中~~
- 关于计算机的未来的意淫
- 使用BlackBerry Transcoder API集成第三方加密方案(一)
- 当前标识(...)没有对"Temporary ASP.NET Files"的写访问权限
- 安装Rational Rose2003 出现错误 提示 error 1920.service NUTCRACKERservice
- C++ 运算符优先级列表
- printf()和sprintf()小比较
- INSTALL_FAILED_INSUFFICIENT_STORAGE 错误
- 从open系统调用的源码看文件的打开过程
- hosts文件设置后无法生效的解决方法
- android 用VideoView播放本地视频文件