基于Java的移动数据加密算法研究

合集下载

JAVA实现AES的加密和解密算法

JAVA实现AES的加密和解密算法

JAVA实现AES的加密和解密算法AES(高级加密标准)是一种对称加密算法,可以通过Java的javax.crypto库来实现。

下面我们将介绍一种基于Java的AES加密和解密算法的实现方法。

1.导入所需的包在Java中使用AES加密和解密算法需要导入以下两个包:```import javax.crypto.Cipher;import javax.crypto.spec.SecretKeySpec;```2.创建加密和解密函数首先,我们需要创建加密函数和解密函数。

加密函数将输入的明文数据加密为密文,解密函数将输入的密文数据解密为明文。

```javaprivate static byte[] encrypt(byte[] key, byte[] data) throws ExceptionSecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);return cipher.doFinal(data);private static byte[] decrypt(byte[] key, byte[] encryptedData) throws ExceptionSecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);return cipher.doFinal(encryptedData);```3.测试加密和解密函数为了验证加密和解密函数的正确性,我们可以创建一个测试函数来测试它们。

Android应用开发中的用户数据加密技术

Android应用开发中的用户数据加密技术

Android应用开发中的用户数据加密技术在Android应用开发中,用户数据加密技术被广泛应用于保护用户的隐私和数据安全。

随着移动应用的普及和用户对数据隐私的关注增加,开发者必须采取措施确保用户数据不会被未经授权的访问和窃取。

本文将介绍Android应用开发中常用的用户数据加密技术。

一、对称加密算法对称加密算法是一种将数据转换成无法理解的密文,并且需要特定的密钥才能将密文解密为原始数据的方法。

在Android应用中,常见的对称加密算法有AES(Advanced Encryption Standard)和DES(Data Encryption Standard)。

1. AES算法AES算法是一种高级加密标准,广泛应用于保护敏感数据的机密性和完整性。

它使用128位、192位或256位密钥对数据进行加密和解密,并且是当前最安全可靠的加密算法之一。

在Android应用中,可以使用Android提供的javax.crypto包下的类库进行AES加密和解密操作。

2. DES算法DES算法是一种对称密钥算法,使用56位的密钥对数据进行加密和解密。

尽管DES算法已经过时,并且相对于AES来说安全性较低,但仍然可以在特定情况下使用。

在Android应用中,可以使用javax.crypto包下的类库来进行DES加密和解密操作。

二、非对称加密算法非对称加密算法是一种使用公钥和私钥进行加密和解密的方法。

它通过生成一对密钥,公钥用于加密数据,而私钥用于解密数据。

在Android应用中,常用的非对称加密算法有RSA(Rivest-Shamir-Adleman)和DSA(Digital Signature Algorithm)。

1. RSA算法RSA算法是一种公钥加密算法,它使用两个密钥,一个是公钥用于加密,另一个是私钥用于解密。

RSA算法的安全性基于大数分解问题,目前是最广泛使用的非对称加密算法之一。

在Android应用中,可以使用Java的javax.crypto包下的类库进行RSA加密和解密操作。

基于Java的校园二手交易平台的数据加密与解密

基于Java的校园二手交易平台的数据加密与解密

基于Java的校园二手交易平台的数据加密与解密现如今,随着信息技术的不断发展,校园二手交易平台逐渐成为学生们买卖物品的重要途径。

然而,在这个过程中,隐私信息的保护问题也相应凸显出来。

为了确保用户信息的安全性,数据加密与解密技术在校园二手交易平台中显得尤为重要。

一、数据加密技术在校园二手交易平台中,用户的个人信息是至关重要的,包括但不限于联系方式、地址、学号等。

为了防止这些信息被不法分子窃取或篡改,数据加密技术应运而生。

Java作为一种流行的编程语言,其强大的加密库为校园二手交易平台的数据安全提供了可靠保障。

1. 对称加密算法对称加密算法是一种常见的数据加密方式,其特点是加密和解密使用相同的密钥。

在校园二手交易平台中,可以采用AES(Advanced Encryption Standard)算法对用户信息进行加密,保障信息的机密性和完整性。

2. 非对称加密算法非对称加密算法是另一种常用的数据加密方式,它使用公钥和私钥进行加密和解密。

在校园二手交易平台中,可以通过RSA算法生成密钥对,实现用户信息加密和解密的安全传输。

3. 数字签名技术除了对称和非对称加密算法外,数字签名技术也是保障数据安全的重要手段。

通过在信息上附加数字签名,可以确保信息的真实性和完整性,避免信息被篡改或伪造。

二、数据解密技术在用户提交信息或进行交易时,校园二手交易平台需要对加密后的数据进行解密,以确保数据的准确性和完整性。

Java提供了丰富的解密库,可以方便地实现数据的解密操作。

1. 解密算法选择在数据解密过程中,需要选择合适的解密算法对加密数据进行解密。

根据加密时所选择的对称或非对称加密算法,相应地使用相同的密钥或私钥进行解密。

2. 解密操作流程解密操作应按照一定的流程进行,包括读取加密数据、选择解密算法、解密数据等步骤。

通过严格控制解密操作流程,可以有效防止数据泄露或被篡改的风险。

3. 异常处理与日志记录在数据解密过程中,可能会出现各种异常情况,如密钥错误、解密失败等。

基于Java的IDEA加密算法的实现

基于Java的IDEA加密算法的实现

【wz_spaddrever[i]]);严替换成加法逆%,}
for(i=0;i<18;i++){ outkey[wz—spmulrevr[i]】 =(char)
(mullnv
(outkey
wz—spmulrevdi]】));严替换成乘法逆+/}} 在实际应用中,可以使用Java开发工具包(JDK)中内置的对
dataI l【l】=dataI 112]; dataI 112】=tmp;J
tmp=datal l[1l;产最后一轮不交换事/ 2.解密过程的实现。
void key_decryExp(int outkey[])/*解密密钥的变逆处理¥/ {int tmpkey[1=new inq52】;
int i;
Socket通信的支持,通过JCE中的Java流和链表。加密基于
Socket的网络通信。咽
基于Java的IDEA加密算法的实现
作者: 作者单位: 刊名:
英文刊名: 年,卷(期): 被引用次数:
来羽 郑州广播电视大学
河南科技 HENAN KEJI 2010,(4) 0次
本文链接:/Periodical_hnkj201004042.aspx 授权使用:西安交通大学(xajtdx),授权号:7775a1cd-e500-4b5b-9bb6-9e9e01273ab0


息Ⅲ 信¨ 术D ●●■o 叠 一
技舭
■■■●■ ●■l缸■ 一■一一 ■■一


■一-■源自一、IDEA数据加密算法 随着Internet的迅速发展,电子商务的浪潮已势不可挡,人 们把日常t作的数据都放在Internet上进行传输,从而大大提高 了效率.且降低了成本,创造了良好的效益。但是.由于Intemet 网络协议本身存在着重要的安全问题(如lP包本身并不继承任 何安伞特性,很容易伪造出IP包的地址、修改其内容、重播以前 的包甚至在传输途中拦截并查看包中的内容).使网上的信息传 输存在巨大的安全风险.使得电子商务的安全问题也越来越突 出:加密技术是电子商务中最主要的安全技术,加密方法的选 取直接影响到电子商务活动中信息的安全程度,在电子商务系 统中。主要的安全问题都可以通过加密来解决。 针对我国的情况,虽然可以引进很多的外周设备,但加密 设备不能完全依靠引进,因为它涉及到网络安伞、国家机密信 息的安全,所以关键设备必须自己研制。当前国际上有许多 加密算法.其中DES(Data Encryption Standard)是发明最早 且应用最广泛的分组对称加密算法,DES用56位密钥加密64 位明文。输出64位密文,DES的56位密钥共有256种可能的 密钥。 IDEA数据加密算法是由中国学者来学嘉博士和著名的密 码专家James I。Massey于1990年联合提出的,它的明文和密 文都是64比特。但密钥长度为128比特。IDEA是作为迭代的分 组密码实现的,使用128位的密钥和8个循环。这比DES提供了 更多的安伞性.但是在选择用于IDEA的密钥时,应该排除那些 称为“弱密钥”的密钥?DES只有四个弱密钥和12个次弱密钥. 而IDEA中的弱密钥数相当可观.有2的51次方个弱密钥。但 是,如果密钥的总数非常大。达到2的128次方个.那么仍有2的 77次方个密钥可供选择。IDEA被认为是极为安全的加密算 法。使用128位的密钥。蛮力攻击中需要进行的测试次数与DES 相比会明显增大. 二、Java密码体系和Java密码扩展 Java是Sun公司开发的一种面向对象的编程语言.并且由于 它的平台无关性被大量应用于Internet的开发。Java密码体系 (JCA)和Java密码扩展(JCE)的设计目的是为Java提供与实现无 关的加密函数API。它们都用factory方法来创建类的例程,然后 把实际的加密函数委托给提供者指定的底层引擎,引擎中为类 提供了服务提供者接口在Java中实现数据的加密和解密,是使 用其内置的JCE(Java力fl密扩展)来实现的: Java开发工具集1.1为实现包括数字签名和信息摘要在内 的加密功能.推出了一种基于供应商的新型灵活应用编程接 口。Java密码体系结构支持供应商的互操作.同时支持硬件和 软件实现。Java密码学结构设计遵循两个原则:算法的独立性

基于Java的Misty1算法的加密软件的实现

基于Java的Misty1算法的加密软件的实现

1引言1.1课题背景现代密码学是一门迅速发展的应用科学。

随着因特网的迅速普及,人们依靠它传送大量的信息,但是这些信息在网络上的传输都是公开的。

因此,对于关系到个人利益的信息必须经过加密之后才可以在网上传送,这将离不开现代密码技术。

Misty1算法是在1996年公布的,它是一个分组密码算法,密钥长度是128位,明文长度是64位。

它是由在三菱工作的Eisaku Takeda 提交给NESSIE。

MISTY1可以在资源紧张的环境下实现。

整个算法是由递归等组成,每一个层次的结构又一稳妥的Feistel结构。

MISTY1是一迭代密码可以迭代超过8轮,或者更普遍,迭代4回。

它用128位密钥对64位数据进行不确定轮回的加密。

它采用了两个S -盒,一个7 × 7 S-盒,s7 ,一个9 × 9 S-盒,s9。

它取得了良好的良好的阻力线和鉴别攻击,而且还使能实行以相对较少的逻辑组件中执行函数的程度相对较低。

1.2国内外研究现状随着我国对计算机的普及,计算机和通信技术已经在我国得到了广泛发展及应用,从而使我们对信息的安全存储、安全处理和安全传输的需要越来越迫切。

特别在Internet的应用中,以及个人通信、个人电子身份证、办公自动化,电子邮件、电子自动转帐支付系统和自动零售业务网的建立与实现,信息的安全保护问题已经显得十分突出,而能够解决这一问题的一个有效手段就是使用现代密码技术。

美国早在1977年就制定了本国的数据加密标准,即DES。

随着DES的出现,人们对分组密码展开了深入的研究和讨论,已有大量的分组密码,如DES的各种变形、IDEA算法、SAFER系列算法、RC系列算法、Skipjack算法、FEAL系列算法、REDOC系列算法、CAST系列算法Khufu, KhafreMMB, 3-WAY, TEA, Blowfish,GOST,SQUARE,MISTY,Rijndael算法和AES15种候选算法(第一轮),另有NESSIE17种候选算法(第一轮)等。

用java编程实现RSA加密算法

用java编程实现RSA加密算法

用java编程实现RSA加密算法RSA加密算法是目前应用最广泛的公钥加密算法,特别适用于通过Internet传送的数据,常用于数字签名和密钥交换。

那么我今天就给大家介绍一下如何利用Java编程来实现RSA加密算法。

一、RSA加密算法描述RSA加密算法是1978年提出的。

经过多年的分析和研究,在众多的公开密钥加密算法中,RSA加密算法最受推崇,它也被推荐为公开密钥数据加密标准。

由数论知识可知,若将一个具有大素数因子的合数进行分解是很困难的,或者说这个问题的计算量是令人望而生畏的,而RSA加密算法正是建立在这个基础上的。

在RSA加密算法中,—个用户A可根据以下步骤来选择密钥和进行密码转换:(1)随机的选取两个不同的大素数p和q(一般为100位以上的十进制数),予以保密;(2)计算n=p*q,作为用户A的模数,予以公开;(3)计算欧拉(Euler)函数z=(p-1)*(q-1),予以保密;(4)随机的选取d与z互质,作为A的公开密钥;(5)利用Euclid算法计算满足同余方程e*d≡1modz的解d,作为用户A的保密密钥;(6)任何向用户A发送信息M的用户,可以用A的公开模数D和公开密钥e根据C=Me mod n得到密文C;RSA加密算法的安全性是基于大素数分解的困难性。

攻击者可以分解已知的n,得到p和q,然后可得到z;最后用Euclid算法,由e和z得到d。

然而要分解200位的数,需要大约40亿年。

二、用Java语言描述RSA加密算法的原理假设我们需要将信息从机器A传到机器B,首先由机器B随机确定一个private_kcy(我们称之为密钥),可将这个private_key始终保存在机器B中而不发出来。

然后,由这个private_key计算出public_key(我们称之为公钥)。

这个public_key的特性是:几乎不可能通过该public_key计算生成它的priyate_key。

接下来通过网络把这个public_key 传给机器A,机器A收到public_key后,利用public_key将信息加密,并把加密后的信息通过网络发送到机器B,最后机器B利用已知的pri.rate_key,就可以解开加密信息。

基于Java的RSA公钥密码算法的实现与探讨

基于Java的RSA公钥密码算法的实现与探讨

基于Java的RSA公钥密码算法的实现与探讨摘要:鉴于Java语言在网络上的安全特性和RSA加密算法的优越性,介绍了公钥密码体制的概念和RSA加密算法的原理,并在Java环境下实现RSA公钥密码算法。

关键词:安全体制;Java;公钥密码;RSA算法0 引言随着计算机网络技术的迅速发展,人类已步入数字化的信息时代。

通过网络进行远距离的、快速的信息交流和信息处理已变得越来越普遍。

同时,人们对信息的安全存储、安全处理和安全传输的需求也越来越迫切,但是,由于Internet 网络协议本身存在着重要的安全问题(IP包本身并不继承任何安全特性,很容易伪造出IP包的地址、修改其内容以及在传输途中拦截并查看包的内容),使网上的信息传输存在巨大的安全风险,因而数据安全越来越受到重视,算法工程技术上的实现也就有着重要的意义。

为了解决这一问题,保证数据的保密性,我们可以采用不同的加密算法对数据进行加密。

因为Java语言的安全性和网络处理能力较强,而且RSA加密算法的强大和难破解性,本文主要介绍使用RSA数据加密算法在Java环境下实现数据的安全传输。

1 Java安全体制Java 是Sun 公司开发的一种面向对象的编程语言,并且由于它的平台无关性被大量应用于Internet 的开发。

由于Java 主要用于网络应用程序开发,因此对安全性有较高的要求。

如果没有安全保证,用户从网络下载程序执行就非常危险。

Java通过自己的安全机制防止了病毒程序的产生和下载程序对本地系统的威胁破坏。

当Java字节码进入解释器时,首先必须经过字节码校验器的检查,然后,Java解释器将决定程序中类的内存布局,随后,类装载器负责把来自网络的类装载到单独的内存区域,避免应用程序之间相互干扰破坏。

最后,客户端用户还可以限制从网络上装载的类只能访问某些文件系统。

2 密码体制及RSA公钥密码2.1 公钥密码体制的概念首先我们要理解什么是密码的概念,简单的说它就是一组含有参数k的变换E。

基于Java的IDEA加密算法探讨

基于Java的IDEA加密算法探讨

户只需 了解密码算 法的概念 , 不用去关 而 心如何 实现这些概念 。
2 2实现的独立性和相互作用性。实 . 现的独立性 和相互作用性通过密码服务提
供器来实现 。密码服务提供器是实现一个
或 多个密码服务 的一 个或 多个程序包 。软 件开 发商根据一定接 口, 将各种算 法实现 的提供 器。安装和 配置提供器 , 可将 包含 提 供 器 的 Z IP 和 J A R 文 件 放 在 C AS P L S ATH下 , 再编辑 Jv 安全属性文 aa 件来设置定义一个提供器 。 a a Jv 运行环境
i t i n ;
itt n mp, X}
钥的总数非常大 , 达到 2 1 8 的 2 次方个 , 那 么仍有 2 7 方个密钥 可供选择 。DE 的7 次 I A 被认为是极为安全的 。 用 18 使 2 位的密钥 , 蛮 力攻击 中需要进行的测试次数 与DE } S ̄ I 比会 明显增大 ,甚 至允许对弱密钥 测试 。
两个 元素 :算法 和密 钥 。算法是 将 普通
的文 本 ( 者可 以理 解的 信息 )与 一 串 或 数字 ( 密钥 )结 合 ,产生 不可理 解 的密 文的 步骤 ;密钥 是用 来对 数据进 行 编码 和解 码 的一 种算 法 。 13 I A数据加密算法 . DE
I DEA 是 I t r a i n l Da a n e n t0 a t E c y to l oi m 的 缩 写 , 1 9 n r p in A g r h t 是 0 9
和Masy 在 19 年进行 了改进 , se 92 强化 了 抗差分分 析能 力,改称 为 I E D A。 I A 是 作为迭代 的分组密码 实现 DE
络协议本 身存在着重要的安全 问题(P包 I 本 身并不继 承任何安全特 性 , 容易伪造 很
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于Java的移动数据加密算法研究李晓勇北京邮电大学PCN&CAD中心,北京(100876)E-mail:xiaoyongli83@摘要:本文总结了常用的数据加密算法和其在java环境中的实现,并在此基础上分析了几种在移动环境中常用的数据加密的常用算法,最后给出了一个AES算法的java实现。

关键词:公钥,私钥,Java1.引言当前,移动通信技术不断发展,其规模也不断扩大,移动通信终端(主要是手机) 的功能也在不断增强。

人们越来越依赖于互联网上的信息,并且希望移动终端能够连上互联网络进行信息的传输,移动商务逐步变为商家的主要业务。

对于移动用户和无线应用程序开发人员而言,安全性正在成为一个重要问题。

通常情况下,为了提供端到端的安全,移动安全解决方案必须在应用层和传输层这两个网络层之一内执行。

移动终端的数据在传输过程多次中转存在安全隐患,并且传输层的加密不能由用户自己控制,相比较而言用户更愿意在应用层进行数据直接加密。

2.常用加密算法简介2.1 数字摘要数字摘要主要用于对要传输的数据作运算生成信息摘要,它并不是一种加密机制,但却能产生信息的数字“指纹”,它的目的是为了确保数据没有被修改或变化,保证信息的完整性不被破坏[1]。

主要使用单向散列函数算法,可用于检验消息的完整性,和通过散列密码直接以文本形式保存等,目前广泛使用的算法有MAC、MD5、SHA。

MD5(Message Digest Algorithm 5):是RSA数据安全公司开发的一种单向散列算法,MD5被广泛使用,可以用来把不同长度的数据块进行暗码运算成一个128位的数值;SHA(Secure Hash Algorithm)这是一种较新的散列算法,可以对任意长度的数据运算生成一个160位的数值;MAC(Message Authentication Code):消息认证代码,是一种使用密钥的单向函数,可以用它们在系统上或用户之间认证文件或消息。

HMAC(用于消息认证的密钥散列法)就是这种函数的一个例子。

CRC(Cyclic Redundancy Check):循环冗余校验码,CRC校验由于实现简单,检错能力强,被广泛使用在各种数据校验应用中。

占用系统资源少,用软硬件均能实现,是进行数据传输差错检测地一种很好的手段。

jdk1.5对上面都提供了支持,在java中进行消息摘要很简单,java.security.MessageDigest 提供了一个简易的操作方法,还可以通过消息认证码来进行加密实现,javax.crypto.Mac提供了一个解决方案。

2.2对称密码技术消息摘要只能检查消息的完整性,但是单向的,对明文消息并不能加密,要加密明文的消息的话,就要使用其他的算法确保机密性。

对称密钥加密也称秘密密钥加密,加密和解密使用同一个密钥。

因此信息的发送方和接收方必须共享一个密钥。

对称密码技术是从传统的简单换位代替密码发展而来的,对称密码体制按加密模式可分为序列密码和分组密码两大类[2] [3]。

2.2.1序列密码序列密码的主要原理是通过有限状态及产生性能优良的伪随机序列,使用该序列加密信息流,按照逐比特加密的规则得到密文序列。

所以,序列密码算法的安全程度完全取决于伪随机序列的好坏。

序列密码的优点是运算速度快,秘闻传输过程中的错误不会在明文中扩散;其缺点是密钥变换过于频繁、密钥分配较难。

2.2.2分组密码分组密码是将明文分成长度固定的数据组,在给定密钥的控制下,使之变换成相应的密文组。

一次对以若干位为一组的明文进行操作与运算的明文密码算法,就是分组密码非对称密码技术。

使用私钥加密首先需要一个密钥,可用javax.crypto.KeyGenerator产生一个密钥(java.security.Key),然后传递给一个加密工具(javax.crypto.Cipher),该工具再使用相应的算法来进行加密,主要对称算法有:DES(实际密钥只用到56位),AES(支持三种密钥长度:128、192、256位),通常首先128位,其他的还有DESede等,jdk1.5种也提供了对对称算法的支持。

2.3公钥加密公开密钥加密也称为非对称密钥加密。

公开密钥加密使用两个不同的密钥:一个用来加密信息,称为加密密钥;另一个用来解密信息,称为解密密钥。

用户把加密密钥公开,因此加密密钥也称为公开密钥,简称公钥。

解密密钥保密,因此解密密钥也称为私有密钥,简称私钥。

这两个密钥是数学相关的,用某用户的加密密钥加密后所得的数据只能用该用户的解密密钥才能解密[4]。

因而要求用户的私钥不能透露给自己不信任的任何人。

目前比较流行的公钥密码体制主要有两类:一类是基于大整数因子分解问题的,其中最典型的代表是RSA 体制;另一类是基于离散对数问题的,如ElGamal 公钥密码体制和影响比较大的椭圆曲线公钥密码体制。

公钥加密与对称密钥加密相比,其优势在于不需要一把共享的通用密钥,用于解密的私钥不发往任何地方,这样,即使公钥被截获,因为没有与其匹配的私钥,所以截获的公钥对入侵者是没有任何用处的。

但是公钥加密速度很慢(比私钥加密慢100到1000倍),公钥的主要算法有RSA,还包括Blowfish,Diffie-Helman等,jdk1.5种提供了对RSA的支持。

2.4 数字签名数字签名确定交换消息的通信方身份的第一个级别。

A通过使用公钥加密数据后发给B,B利用私钥解密就得到了需要的数据,由于都是使用公钥加密,那么如何检验是A发过来的消息呢?A可以利用A自己的私钥进行加密,然后B再利用A的公钥来解密,就可以了;数字签名的原理就基于此,而通常为了证明发送数据的真实性,通过利用消息摘要获得简短的消息内容,然后再利用私钥进行加密散列数据和消息一起发送。

java中为数字签名提供了良好的支持,java.security.Signature类提供了消息签名。

2.5 数字证书数字证书将一个身份标识连同公钥一起进行封装,并由称为认证中心或 CA 的第三方进行数字签名。

如A用私钥加密,那么B接受到消息后,用A提供的公钥解密;现在有个C,他把消息拦截了,然后用自己的私钥加密,同时把自己的公钥发给B,并告诉B,那是A的公钥,就会出现欺诈,这时候就需要一个中间机构Certificate Authority(也即CA),有名的CA机构有Verisign等,目前数字认证的工业标准是:CCITT的X.509:java平台提供了密钥库,用作密钥和证书的资源库。

从物理上讲,密钥库是缺省名称为 .keystore 的文件(有一个选项使它成为加密文件)。

密钥和证书可以拥有名称(称为别名),每个别名都由唯一的密码保护。

密钥库本身也受密码保护;您可以选择让每个别名密码与主密钥库密码匹配。

3.移动加密虽然加密算法已经相对完备,然而考虑到特殊环境下的具体情况时,并不是每一种方法都适合。

常用的公钥密码算法如RSA、DH、ElGamal等都涉及到指数运算,运算过程速度慢,而且密钥位数较多,随之需要的存储容量也大。

基于椭圆曲线的公钥密码体制( ECC)虽然可以避免上述一些公钥算法的缺点,但算法的实现较为复杂。

移动通信数据量小,环境恶劣,计算资源十分有限,因此需要运算效率高,速度快,易于实现的算法。

目前,大多采用对称密钥中的DES,AES算法和改进的非对称密钥NTRU算法及其演化版。

3.1 DES算法DES 采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥[5][6]。

对称加密算法使用起来简单快捷,密钥较短,且破译困难,但开放性差。

DES 属于分组密码体制,它用于进行大批数据加密,其基本思想是,在一个56 位密钥的控制下,将按64 位分组的明文信息加密成按64 位分组的密文信息。

整个加密过程由16 个独立的加密循环所组成,每个循环使用—个自己的密钥K(1) ,K(2) , ,K(16) 和加密函数,各个密钥为48位,按一定的算法从主密钥中生成。

3.2 AES算法AES是旧式数据加密标准(DES)的后续标准是一种可用来保护电子数据的新型加密算法,已经被网络硬件和软件供应商广泛的采用[7][8]。

因此对AES算法进行研究并利用该算法对重要数据进行加密对保证数据的安全有着重要的意义。

特别的,AES是可以使用128、192和256位密钥的迭代式对称密钥块密码,并且可以对128位(16个字节)的数据块进行加密和解密。

与非对称式密码系统不同的是,对称密钥密码使用同一个密钥来对数据进行加密和解密。

3.3 NTRU 算法NTRU 算法的安全性是基于数论中在一个大维数的格中寻找一个很短向量的数学难题[9]。

NTRU 公钥密码系统的安全性来自多项式混合系统和与之独立的互素的整数p 和q 的模规约运算的交互,它是一种基于多项式截断环的加解密系统,其加密过程基于环上多项式的运算和对互素数p 和q 的模规约运算,解密的有效性依赖于某些元素的概率。

3.4基于中国剩余定理的算法该算法借鉴公钥密码体制NTRU的设计思想,根据构造公钥密码体制的一般设计策略,以中国剩余定理为理论基础提出了一种全新的公钥密码方案[10]。

该方案安全、简单、高效,易于实现,特别适合于小数据量和受限环境(如手机、智能卡)下的加密通信。

该方案是基于大整数因式分解困难性这个问题上的。

只要模n不能被分解成素数p和q,那么,非授权人员要从密文中恢复明文就相当困难。

该密码方案运算速度相当快,加密过程仅用到2次乘法、1次加法和1次求模;解密过程用到8次求模运算、8次乘法运算和一次求模的逆元运算。

无论是加密过程还是解密过程,所需要的运算量都极小,因此方案极其高效。

方案在加密过程中引入了随机数,这就意味着对于相同的明文,加密后的密文是不同的,也就是说恢复明文中每个比特的困难等同于恢复整个明文的难度。

4.实现代码应用jdk1.5提供的工具包,可以简单的实现上面所说的一些算法。

下面以AES加密算法为例给出一段示例代码:import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import java.security.Key;public class Encription{p ublic static void main(String[] args) throws Exception{if(args.length!=1){System.err.println("Usage:java Encription.java <text>");System.exit(1);}byte[] plainText=args[0].getBytes("UTF8");//通过KeyGenerator形成一个keySystem.out.println("/nStart generate AES key");KeyGenerator keyGen=KeyGenerator.getInstance("AES");keyGen.init(128);Key key=keyGen.generateKey();System.out.println("Finish generating DES key");//获得一个私鈅加密类Cipher,ECB是加密方式,PKCS5Padding是填充方法Cipher cipher=Cipher.getInstance("AES/ECB/PKCS5Padding");System.out.println("/n"+cipher.getProvider().getInfo());//使用私鈅加密System.out.println("/nStart encryption:");cipher.init(Cipher.ENCRYPT_MODE,key);byte[] cipherText=cipher.doFinal(plainText);System.out.println("Finish encryption:");System.out.println(new String(cipherText,"UTF8"));System.out.println("/nStart decryption:");cipher.init(Cipher.DECRYPT_MODE,key);byte[] newPlainText=cipher.doFinal(cipherText);System.out.println("Finish decryption:");System.out.println(new String(newPlainText,"UTF8"));}}从上面的示例看出,首先调用KeyGenerator方法生成一个密钥,然后就可以用这个密钥通过私鈅加密类Cipher的doFinal方法进行加密解密了。

相关文档
最新文档