混合加密在高校智慧校园Android终端的应用研究

2019-05-27 08:09:46李隘优
韶关学院学报 2019年3期
关键词:私钥公钥加密算法

李隘优

(闽西职业技术学院 信息与制造学院,福建 龙岩364021)

《国家中长期教育改革和发展规划纲要(2010-2020年)》把教育信息化纳入国家信息化发展整体战略,到2020年基本建成覆盖城乡各级各类学校的教育信息化体系.教育信息化的目的是以云服务为支撑,构建一个职业教育的智能化校园管理平台,以优质教育资源共建共享和应用、资源整合为中心,融入到教学、学习、管理等工作领域,最终实现提高教育质量目标,推动教育教学改革的发展[1].智慧校园是教育信息化发展的一个重要阶段.

智慧校园是指利用云计算、物联网及虚拟化等新技术来改变当前学校中学生、教师、行政管理人员和校内资源的交互方式,整合学校的各应用系统,包括教学、科研、管理和校内资源等,提高校内交互的明确性、及时性和灵敏性,使校园内的网络学习无处不在、网络科研融合创新、校务治理透明高效、校园文化丰富多彩、校园生活方便周到,最终实现智慧化管理及服务的校园模式[2].但智慧校园给人们带来便利的同时,也带来了不容忽视的信息安全问题,若在传输过程中数据泄露,将会给学校造成不可挽回的损失.如何保证数据在智慧校园进行安全且高效的传输就显得非常重要.结合对称加密算法和非对称加密算法的优点,对数据进行混合加密就能较好的解决这个问题.

1 加密算法

1.1 对称加密算法

对称加密算法是指加密和解密都采用同一密钥的加密算法[3].通常是由数据发送方生成密钥,利用生成的密钥对明文进行加密,从而生成密文,再将密文和密钥一起发送给接收方;接收方收到密文和密钥后,利用密钥对密文进行解密[3].

对称加密算法之所以加密解密的速度快,是因为在加密及解密过程都是利用密钥进行操作的[4].但也存在一个严重的问题,就是由于这种方式的安全性完全依赖于密钥,密钥在传输过程一旦泄露,任何人都能够对接收到的密文进行解密.因此在网络传输数据过程中,密钥的保密就显得非常重要.

对称加密算法中,典型的代表有DES、3DES及AES等,由于AES加密算法的安全性要高于前面两种,所以当前对称加密算法主要使用AES加密算法.

1.2 非对称加密算法

非对称加密算法需要两个密钥:公钥及私钥,它们必须是成对出现的.若使用公钥对数据进行加密,就必须用私钥进行解密;反之,若使用私钥对数据进行加密,则只能用公钥进行解密[5].

数据接收方构建密钥对,将公共密钥发送给数据发送方,数据发送方用接收到的公共密钥对数据进行加密,然后将密文再发送给数据接收方,数据接收方使用私有密钥进行解密[5].

非对称加密算法主要典型代表有D-H、ECC、Elgamal及RSA等算法,目前使用最为广泛的是RSA算法.相较于对称加密算法,非对称加密算法在加密和解密时采用不一样的密钥,加密的速度会慢得多,如果数据量大,耗费的时间太多,不适合加密数据量大的数据,但在网络通信过程中,由于只传输公钥,不用担心数据的泄密,因此安全性要高得多.

1.3 混合加密

对称加密算法和非对称加密算法各有各自的优点和缺点,单独使用任何一种加密算法都无法保证数据的安全,因此可考虑结合它们的优点,扬长避短,既可以满足信息安全的需要也可以保证数据加密的速度[6].混合加密算法正是在这种情况下应运而生的,其思路见图1.数据的接收方使用非对称算法构建密钥对,在保留私钥(假设为privateKey)的同时将公共密钥(设为publicKey)发送给数据发送方.数据发送方使用对称加密算法构建对称密钥(设为symmetricKey),利用该密钥对明文进行加密形成密文,并利用接收到的publicKey对symmetricKey进行加密形成加密的密钥(设为encryptedKey),然后将密文和encrypted-Key一起发送给数据接收方.数据接收方用私钥对encryptedKey进行解密得到symmetricKey,再利用symmetricKey调用对称解密算法对密文进行解密得到明文.

图1 混合加密算法加密解密过程

2 混合加密在Android中的应用

在智慧校园中,智能移动终端也是不可或缺的部分,它可以为教师和学生提供方便、快捷的移动化的信息管理服务.目前,移动终端操作系统典型代表是Android和IOS.不管是哪种手机操作系统,都非常重视信息安全,也都提供了数据加密的接口[7].笔者以Android为例,阐述对称加密中的AES算法和非对称加密中的RSA算法混合加密的过程.

2.1 Android终端为数据接收端

2.1.1 创建RSA密钥

假设Android手机端是数据接收端,那么就要在Android手机端产生RSA公钥和私钥.代码如下:

public static KeyPair generateRSAKeyPair(int keyLength) {

KeyPair keyPair=null;

try{KeyPairGenerator keyPairGenerator=KeyPairGenerator.getInstance("RSA");

keyPairGenerator.initialize(keyLength);

//设置密钥长度 ,一般设为1024或2048,小于1024的长度不建议设置,因为被证实不安全

keyPair=keyPairGenerator.generateKeyPair(); //密钥对的生成 }

catch (NoSuchAlgorithmException e){

e.printStackTrace(); }

return keyPair; }

KeyPair keyPair=RSAUtil.generateRSAKeyPair( 2048 );

PublicKey publicKey=keyPair.getPublic(); //得到公钥

PrivateKey privateKey=keyPair.getPrivate(); //得到私钥

获得公钥和私钥后,保留私钥,将公钥发送到服务器端.将数据发送到服务器主要有两种方式,一种是使用HttpURLConnection,另一种是使用由Square公司开发的OKHttp.在Android 6.0版本之前,还可以使用HttpClient,但由于扩展困难且API数量过多,Android已不建议使用这种方式[8].现分别指出使用HttpURLConnection和OKHttp方式将公钥发送至服务器的具体实现方法.

(1)使用 HttpURLConnection

首先获取HttpURLConnection实例:

URL url=new URL(服务器IP地址或者域名);

HttpURLConnection conn= (HttpURLConnection)Url.openConnection();

然后设置HTTP请求的方式为POST:

Conn.setRequestMethod("POST");

最后进行数据输出流的建立,并写入到已经生成的公钥中.

DataOutputStream out=new DataOutputStream(conn.getOutputStream());

Out.writeBytes("publicKey="+publicKey.toString());

(2)使用 OkHttp

由于OkHttp不是原生的,是由Square公司开发的[9],因此在使用之前,需要在android项目中的app/build.gradle文件的dependencies闭包中添加以下内容:

{implementation fileTree(dir: 'libs', include: ['*.jar'])

implementation'com.android.support:appcompat-v7:28.0.0'

implementation'com.android.support.constraint:constraint-layout:1.1.3'

implementation'com.squareup.okhttp3:okhttp:3.4.1'//新增加的内容

testImplementation'junit:junit:4.12'

androidTestImplementation'com.android.support.test:runner:1.0.2'

androidTestImplementation'com.android.support.test.espresso:espresso-core:3.0.2'}

完成后编写POST请求的代码:

OkHttpClient client=new OkHttpClient();

RequestBodyrequestBody=new FormBody.builder()

.add("publicKey",publicKey)

.build();

Request request=new Request.Builder()

.url(服务器IP地址或域名)

.post(requestBody)

.build():

Reponse response=client.newCall(request).execute();

当服务器收到手机端发来的公钥后,调用AES生成算法生成密钥,并用该密钥加密要发送的数据,同时用调用RSA加密算法,应用接收到的公钥对AES密钥进行加密.然后将加密后AES的密钥及经过AES加密的密文一起反馈给终端[10].

2.1.2 解密

(1)解密加密后的AES密钥,相关代码及解释如下:

private static byte[] processData(byte[] srcData, Key key,int mode)

{byte[]resultBytes=null; //用来保存解密后的AES密钥

try{ Cipher cipher=Cipher.getInstance( "RSA/NONE/PKCS1Padding" ); //构建 Cipher对象,需要传入一个字符串,格式必须为“algorithm/mode/padding”或者“algorithm/”,意为“算法/加密模式/填充方式”

cipher.init(mode,key); //初始化 Cipher,mode 指定是加密还是解密,key 为公钥或私钥.此处 mode为解密,传入前面生成的privateKey到key

resultBytes=cipher.doFinal(srcData);//处理数据,加密后的AES密钥作为实参传入srcData}

catch (NoSuchAlgorithmException e)

{e.printStackTrace(); }

catch (NoSuchPaddingException e)

{e.printStackTrace(); }

catch (InvalidKeyException e)

{ e.printStackTrace(); }

catch (BadPaddingException e)

{e.printStackTrace(); }

catch (IllegalBlockSizeException e)

{e.printStackTrace(); }

return resultBytes; }

(2)利用上述AES密钥解密官方,相关代码及解释如下:

Byte[]aesKey=processData(encytAesKey,RSAPrivateKey,Cipher.DECRYPT_MODE);//调用 processData()函数,利用接收到RSA私钥解密加密后的AES密钥,结果返回解密的AES密钥.

public byte[] decryptData(String data,byte[] aesKey,String transform){byte[] clearData=null;

SecretKeySpec secretKeySpec=new SecretKeySpec(aesKey,"AES");

try{Cipher cipher=Cipher.getInstance(transform);//获取与加密时格式一致的Cipher实例

cipher.init(Cipher.DECRYPT_MODE,secretKeySpec);//初始化 Cipher,解密模式

byte[] temp=Base64.decode(data,Base64.DEFAULT); //先 Base64 解码

//解密数据

clearData=cipher.doFinal(temp); }

catch (NoSuchAlgorithmException e)

{e.printStackTrace(); }

catch (NoSuchPaddingException e)

{e.printStackTrace(); }

catch (InvalidKeyException e)

{e.printStackTrace(); }

catch (BadPaddingException e)

{e.printStackTrace(); }

catch (IllegalBlockSizeException e)

{ e.printStackTrace(); }

return clearData; }.

2.2 Android终端为数据发送端

首先手机端调用AES算法生成密钥,并使用AES密钥对要发送的数据进行加密得到密文.同时,接收从服务器端发来的RSA公钥,并使用RSA公钥对AES密钥进行加密.由于这些算法过程和前述内容相似,故不再赘述.

3 结语

基于Android平台下的采用对称加密与非对称加密相结合的加密技术,充分发挥了各自的优点,在保证数据安全的同时也确保数据传输的速度.手机端除了Android平台外,还有IOS平台,如果能够引入IOS平台的混合加密技术,则将会更加完善.智慧校园规划设计建设中,移动互联网技术也是不可或缺的一环.因此,还应考虑移动互联网的加密算法,才能真正建立起智慧校园信息安全的保障体系.

猜你喜欢
私钥公钥加密算法
比特币的安全性到底有多高
基于改进ECC 算法的网络信息私钥变换优化方法
一种基于混沌的公钥加密方案
一种基于虚拟私钥的OpenSSL与CSP交互方案
HES:一种更小公钥的同态加密算法
SM2椭圆曲线公钥密码算法综述
基于小波变换和混沌映射的图像加密算法
Hill加密算法的改进
基于格的公钥加密与证书基加密
对称加密算法RC5的架构设计与电路实现