一种aes加密中的数据优化方法
【技术领域】
[0001]本发明公开一种AES加密中的数据优化方法,属于数据管理技术领域。
【背景技术】
[0002]AES加密算法即密码学中的高级加密标准(Advanced Encrypt1n Standard,AES),又称Ri jndael加密法,是美国联邦政府采用的一种区块加密标准,已经被多方分析且广为全世界所使用。对称密码体制的发展趋势将以分组密码为重点。分组密码算法通常由密钥扩展算法和加密(解密)算法两部分组成。密钥扩展算法将b字节用户主密钥扩展成r个子密钥。目前AES已经逐渐取代了过去的DES,原因就在于DES使用56位密钥,比较容易被破解,而AES可以使用128、192、和256位密钥,并且用128位分组加密和解密数据。AES已经变成目前对称加密中最流行算法之一。但目前的AES采用二进制算法,容易出现计算中程序报异常的情况,而且系统占用资源多,不利于系统的使用。本发明提供一种AES加密中的数据优化方法,通过一对二进制和十六进制互转的方法对,将AES内部计算过程进行优化,提高AES计算的效率,降低内存使用率。
[0003]二进制:二进制数据是用O和I两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,二进制和十六进制,八进制一样,都以二的幂来进位的。
[0004]十六进制是计算机中数据的一种表示方法。它由0-9,A-F组成,字母不区分大小写。十六进制照样采用位置计数法,位权是16为底的幂。
【发明内容】
[0005]本发明针对目前的AES采用二进制算法,容易出现计算中程序报异常的情况,而且系统占用资源多,不利于系统的使用资源的问题,提供一种AES加密中的数据优化方法,通过一对二进制和十六进制互转的方法对,将AES内部计算过程进行优化,提高AES计算的效率,降低内存使用率。
[0006]本发明提出的具体方案是:
一种AES加密中的数据优化方法,基于AES,设置二进制与十六进制的可逆方法对,密钥设置为16的整数倍,利用16进制进行AES程序内部的数据计算加密,再根据可逆方法对转化成二进制数据,进行计算外的数据保密传递。
[0007]所述数据计算加密过程为利用java语言,设置加解密java程序对,对需要加密的内容赋予加密密码,创建密码器,经过初始化,完成加密;利用解密密钥对待解密内容可解
LU O
[0008]所述数据加密过程代码为:
/林
*加密
氺 *Oparam content需要加密的内容
*Oparam password 加密密码氺 ?return
V
public static byte口 encrypt (String content, String password) { try {
KeyGenerator kgen = KeyGenerator.getlnstance(〃AES〃);kgen.1nit (128, new SecureRandom (password.getBytes ()));
SecretKey secretKey = kgen.generateKey ();byte口 enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec (enCodeFormat, 〃AES〃);Cipher cipher = Cipher, getlnstance ("AES") ;// 创建密码器byte口 byteContent = content.getBytes (〃utf_8〃);cipher, init (Cipher.ENCRYPT—MODE,key) ; // 初始化byte口 result = cipher.doFinal (byteContent);
return result; // 力口密 } catch (NoSuchAlgorithmExcept1n e) { e.printStackTrace ();
} catch (NoSuchPaddingExcept1n e) { e.printStackTrace ();
} catch (InvalidKeyExcept1n e) { e.printStackTrace ();
} catch (UnsupportedEncodingExcept1n e) { e.printStackTrace ();
} catch (IIIegalBlockSizeExcept1n e) { e.printStackTrace ();
} catch (BadPaddingExcept1n e) { e.printStackTrace ();
}
return null;
}
完成数据加密过程。根据加密过程,可以设置解密过程代码。
[0009]设置二进制与十六进制的可逆方法对,其中二进制与十六进制互转,代码如下: /**将二进制转换成十六进制氺 Oparam buf 氺 ?return
V
public static String parseByte2HexStr(byte buf[]) {
StringBuffer sb = new StringBuffer (); for (int i = 0; i < buf.length; i++) {
String hex = Integer.toHexString(buf[i] & OxFF);if (hex.length () == I) {hex = ' Oi + hex;
}
sb.append (hex.toUpperCase ());
}
return sb.toStringO ;
};
/**将十六进制转换为二进制氺 Oparam hexStr 氺 ?return
V
public static byte口 parseHexStr2Byte(String hexStr) {if (hexStr.length () < I)return null;byte 口 result = new byte [hexStr.length ()/2];for (int i = 0; i< hexStr.length ()/2; i++) {
int high = Integer, parselnt (hexStr.substring(1^2, i氺2+1), 16); int low = Integer, parselnt (hexStr.substring(1^2+1, i氺2+2), 16); result [i] = (byte) (high ^ 16 + low);
}
return result;
}
完成二进制与十六进制的可逆方法对的互转。调用上述过程,可以计算中程序报异常的概率大大降低,16进制的数据,占用的资源会较二进制的降低90%。
[0010]本发明的有益之处是:本发明基于AES,设置二进制与十六进制的可逆方法对,密钥设置为16的整数倍,利用16进制进行AES程序内部的数据计算加密,再根据可逆方法对转化成二进制数据,进行计算外的数据保密传递,将AES内部计算过程进行优化,提高AES计算的效率,降低内存使用率。
【具体实施方式】
[0011]—种AES加密中的数据优化方法,基于AES,设置二进制与十六进制的可逆方法对,密钥设置为16的整数倍,利用16进制进行AES程序内部的数据计算加密,再根据可逆方法对转化成二进制数据,进行计算外的数据保密传递。
[0012]所述数据计算加密过程为利用java语言,设置加解密java程序对,对需要加密的内容赋予加密密码,创建密码器,经过初始化,完成加密;利用解密密钥对待解密内容可解
LU O
[0013]通过下面的步骤(以java编程语言为例),可以对AES的安全性进一步优化。
[0014](I)加解密java程序对:
/林
*加密
氺
*Oparam content需要加密的内容
*Oparam password 加密密码氺 ?return
V
public static byte口 encrypt (String content, String password) { try {
KeyGenerator kgen = KeyGenerator.getlnstance(〃AES〃); kgen.1nit (128,new SecureRandom (password.getBytes ())); SecretKey secretKey = kgen.generateKey (); byte口 enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec (enCodeFormat, 〃AES〃);Cipher cipher = Cipher, getlnstance ("AES") ;// 创建密码器byte口 byteContent = content.getBytes (〃utf_8〃);cipher, init (Cipher.ENCRYPT—MODE,key) ; // 初始化byte口 result = cipher.doFinal (byteContent);return result; // 力口密} catch (NoSuchAlgorithmExcept1n e) {e.printStackTrace ();
} catch (NoSuchPaddingExcept1n e) { e.printStackTrace ();
} catch (InvalidKeyExcept1n e) { e.printStackTrace ();
} catch (UnsupportedEncodingExcept1n e) { e.printStackTrace ();
} catch (IIIegalBlockSizeExcept1n e) { e.printStackTrace ();
} catch (BadPaddingExcept1n e) { e.printStackTrace ();
}
return null;
}
/#解密
*Oparam content 待解密内容
*Oparam password 解密密钥氺 ?returnV
public