一種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