在线客服系统

期刊库

教育   经济   科技   财会   管理   
医学   法学   文史   工业   建筑   
农学   水利   计算机   更多>>
 首 页    论文大全   论文精品    学术答疑    论文检测    出书咨询    服务流程    诚信通道    关于我们 

基于USBKey的考试系统安全的设计与实现(4)

人气指数: 发布时间:2016-03-10 10:41  来源:http://www.zgqkk.com  作者: 徐涛 文福安
分享到:

 


  4.2.1 大端模式与小端模式
  在各种计算机体系结构中,对于字节、字、基本数据类型等的存储机制有所不同,因而引发了计算机通信领域中一个很重要的问题,即通信双方交流的信息单元(比特、字节、字、双字等等)应该以什么样的顺序进行传送。如果达不成一致的传送顺序规则,通信双方将无法进行正确的编/译码从而导致双方通信失败。
  现代的计算机系统一般采用字节(8 bit Byte)作为逻辑寻址单位。每个地址单元都对应着一个字节,一个字节为8bit。然而在C/C++语言中除了8bit的char之外,还有16bit的wchar t型和short类型,32bit的Int及long类型,64位的double及long long类型(编译器不同,基本数据类型所占的长度也可能不同,具体情况需根据编译器自身的实现)。另外,对于位数大于8位的处理器,例如16位、32位或者64位的处理器,由于寄存器宽度大于一个字节(8 bit),那么必然存在着如何安排多个字节数据存储顺序(Byte Order)的问题。常见的字节存储顺序有两种:Big Endian(High-byte first)和Little Endian (Low-byte first). IntelX86平台采用Little Endian,而PowerPC处理器则采用了Big Endian。另外,对于大小端的处理也和编译器的具体实现有关。
  (1) Little-Endian,即小端存储模式。就是指数据的高位字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。C/C++语言采用的存储模式就是Little-Endian,比如有一个双字节变量shortA-OX1234,那么A所代表的变量的第一个字节存储的是OX34,第二个字节存数的是OX12.
  (2) Big-Endian,即大端存储模式。就是指数据的高位字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这种存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放。Java语言采用存储模式是Big-Endian。比如在Java中有一个双字节变量shortA-OX1234,那么A所代表的变量的第一个字节存储的是OX12,第二个字节存数的是OX34;与C/C++语言中的正好相反。
  另外在网络字节序中:TCP/IP各层协议将字节序顺序定义为Big-Endian,因此TCP/IP协议中使用的字节序通常称之为网络字节序。故而网络中传输的数据为Big-Endian类型。
  由以上字节序的介绍可知,一个C/C++中的UTF-16编码的字母或者多余一个字节的基本数据类型(short类型,int类型,double类型等),传输到Java语言中,要转换成java语言的Big-Endian位表示形式(逆序顺序交换高低位字节),才能正确译码,反之亦然。
  而RSA算法对数据的加密和解密算法均是基于大数质数分解的,比如一个1024位的公钥的模数N,就是一个128字节大小的整数。其加密后的数据也是一个很大的整数。由于加密后的数据是一个大整数,多于一个字节,便也存在大小端表示问题。因此在Java和C/C++中要对解密前的数据按字节进行反转后才能解密成功。
  4.2.2 加解密算法的数据转换流程
  为了避免数据的多字节存储问题(如UTF-16编码的双字节字符,从C/C++语言与Java语言,就要进行字节序的转换),不管何种语言,均将要加密的明文字符串转换为UTF-8字节流,然后进行加密;解密完成时,再进行UTF-8解码,最终形成正确的明文数据。这样有两个好处:
  (l)可以避免UTF-16编码字符带来的大小端转换问题
  (2)同时由于使用的数据大部分为英文字符,由UTF-16转换为UTF-8,可以节省一个字节的存储空间,这样便可减小要加密的字节数,加快加解密数据的速度。
  因此,考生机客户端(C/C++端)对数据RSA加密的数据转换流程如图2。首先,明文数据经过UTF-8编码,然后调用USBKey中CSP模块完成数据的加密,得到的数据按照一个字节一个字节的逆序翻转,再经过Base64编码,方便在网络上进行传输,保证数据传输过程不会出现差错。上述流程中,加密完的数据进行按字节逆序翻转,是因为RSA加密运算的结果也是一个大整数,也存在大端存储和小端存储的问题,进行转换后,方便JAVA服务器端进行数据的解密。
  Java端进行解密时数据转换流程如图3。首先,收到的密文先经过Base64解码,然后调用服务器端CSP模块解密,最后经由UTF-8解码,获得最终的明文数据。
  4.3 证书导出公钥
  在考生机客户端和服务器通信的过程中,java服务器需要使用客户端的公钥加密数据,因此需要获得客户端公钥。而客户端的公钥存储在USBKey中的数字证书里。因此就需要从USBKey的证书中导出公钥参数,即公钥的模数N和指数E。然而由于RSA算法对数据的加密和解密算法均是基于大数质数分解的,模数N和指数E也都是一个大整数(Biginterger),因此其也存在大端表示和小端表示。C/C++采用LittleEndian,而Java采用Big Endian,因此从客户端证书中读取到N和E后,需要将其按字节反转,转换为java端大端存储形式,才能得到正确的N和E,并用其进行RSA加密。

期刊库(http://www.zgqkk.com),是一个专门从事期刊推广、投稿辅导的网站。
  本站提供如何投稿辅导,寻求投稿辅导合作,快速投稿辅导,投稿辅导格式指导等解决方案:省级投稿辅导/国家级投稿辅导/核心期刊投稿辅导//职称投稿辅导。


  【免责声明】本文仅代表作者本人观点,与投稿辅导_期刊发表_中国期刊库专业期刊网站无关。投稿辅导_期刊发表_中国期刊库专业期刊网站站对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担全部责任。

 
QQ在线咨询
投稿辅导热线:
180-1501-6272
微信号咨询:
fabiaoba-com
咨询电话:18015016272 投稿邮箱:zgqkk365#126.com(#换成@)
本站郑重声明:文章只代表作者观点, 并不意味着本站认同。所载文章、数据仅供参考,使用前请核实,风险自负。
部分作品系转载,版权归原作者或相应的机构   若某篇作品侵犯您的权利,请来信告知.版权:周口博闻教育咨询有限公司 
Copyright © 2005-2023 . 期刊库 版权所有