计算机-基于DES算法的二维码扫描的实现(3)

2019-04-16 22:32

开 始 调 用 相 机 功 能 采 集 条 码 图 像 图 像 预 处 理 读 取 数 据 图 像 处 理 、矫 正、译 码 显 示 文 本 信 息 图3 系统流程图

4.2 数据加密与二维码生成模块的实现

4.2.1 数据加密模块的实现——DES加密算法 (1)构造DES加密的函数,并初始化密钥。 public DES(String key){ this.key = key; }

(2)输入参数后,先对参数格式的正确性进行检测,如果错误就直接返回空(null)。 private byte[] UnitDes(byte[] des_key, byte[] des_data, int flag) { if ((des_key.length != 8) || (des_data.length != 8) || ((flag != 1) && (flag != 0))) {

hrow new RuntimeException(\}

(3)首先设置好DES加密算法的置换方法。 初始化密钥数组,并进行PC-1、PC-2、??、置换。

例如:对密钥进行PC-1变换,并生成生成子密钥keyarray[i][j] private void KeyInitialize(int[] key, int[][] keyarray) { int i; int j; int[] K0 = new int[56]; for (i = 0; i < 56; i++) {

K0[i] = key[PC_1[i] - 1];

- 9 -

}

for (i = 0; i < 16; i++) {

LeftBitMove(K0, LeftMove[i]);for (j = 0; j < 48; j++) { keyarray[i][j] = K0[PC_2[j] - 1]; } } }

4)当dest和src两个都不为空时,将源数组src组件的子序列复制到引用的dest目标数组中。

ublic void arraycopy(byte[] src,int srcPos,byte[] dest, intdestPos,int length){ if (dest != null && src != null){ byte[] temp = new byte[length]; for (int i = 0;i < length;i++){ temp[i] = src[srcPos + i]; }

for (int i = 0;i < length;i++){ dest[destPos + i] = temp[i]; }

(5)加密算法设计。

对原始数据长度进行检测,原始数据长度不满四位的加0补满四位,并且保证原始数据的前4位为该数据的长度。key是密钥,data是要处理的数据,flag 1为加密,0为解密,return 处理后的数据。

public byte[] encrypt(String data) throws UnsupportedEncodingException{ String dataLength = data.length() + \if (dataLength.length() == 1){ dataLength = \}else if (dataLength.length() == 2){ dataLength = \}if (dataLength.length() == 3){ dataLength = \}

StringBuffer sbDate = new StringBuffer(); sbDate.append(dataLength); sbDate.append(data);

byte[] bytekey = key.getBytes();

- 10 -

byte[] bytedata = sbDate.toString().getBytes();

byte[] result = new byte[(bytedata.length + 8) - (bytedata.length % 8)]; result = DesEncrypt(bytekey, bytedata, 1); return result; }

(6)输入端信息的的DES加密如图4所示。

图4 数据的DES加密结果图

4.2.2 二维码生成模块

本设计的二维码是首先在Eclipse软件中利用DES.java加密解密程序,将输入的数据用密钥进行加密,再将得到的密文在草料网上转化为二维码所得。二维码的转化实现如图5所示。

图5二维码的转化

4.3 二维码扫描识别与数据解密模块的实现

4.3.1 系统界面设计

本设计的用户界面模块提供了一个用户操作的界面,可以进行用户的登录,并且显示拍摄的窗口。手机用户通过用户界面的菜单进行输入与选择操作。图6是用户原始界面。

- 11 -

图6 用户原始界面 4.3.2 二维码扫描识别的实现

本设计中,在建立工程(Project)时借助了Google提供的开源类解码核心库Zxing,用于实现对二维码的扫描与识别,借助Zxing里的类库,调用其中的特定函数进行解码功能的实现。 Zxing是一个开放源码的图像处理库,它借用了Java来对条码进行编写。

在对二维码进行扫描识别时需要用到摄像头功能,因此本设计选用了使用广泛的Android系统智能机进行二维码的识别测试。 (1)系统包含的包结构图 (2)系统主要包的功能介绍

本设计的主要包包括:Previewcallback:摄像头回调包;CameraManager:摄像头管理包,主要管理摄像头功能的开关;DecodeHandle:数据传输包;DecodeFormatManager:配置解码格式包;CaptureActivityHandle:是解码成功的数据传输媒介; Encoding:根据输入的字符串生成二维码;AndroidManifest.xml:配置文件。ViewfinderView 是自定义的View,是拍摄时Android手机屏幕中间的取像框。

加载main activity,在此类中创建CaptureActivityHandle对象,由该包调用手机的摄像头。创建DecodeThread线程,该线程创建了Decodehandle对象,而这个对象获取从摄像头采集到的并转化后的原始byte数据。

包结构图见图7。

- 12 -

图7 包结构图

(3)设置界面布局,设置Activity关联视图集根。OnCreate方法是在Activity被创建时被系统调用的,是Bundle类型的参数,savedInstanceState方法用来保存Activity状态,super

图8 设置界面布局

调用(成员方法)。见图8。

(4)打开扫描界面扫描二维码。见图9。

- 13 -


计算机-基于DES算法的二维码扫描的实现(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:施工组织设计(纳黔高速连接线2)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: