对称加密:加密(encryption)与解密(decryption)使用的是同样的密钥(secret key)。加密和解密算法是公开的,秘钥必须严格保存,如果秘钥泄露,别人就能够用密文+秘钥还原成你的明文。比如常见的DES/AES都是属于对称加密算法。优点:算法公开、计算量小、加密速度快、加密效率高。缺点:秘钥的管理和分发非常困难,不够安全。在数据传送前,发送方和接收方必须商定好秘钥,然后双方都必须要保存好秘钥,如果一方的秘钥被泄露,那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的唯一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。
下面的Utils类实现:字符串与UTF-8字节数组的相互转换,十六进制字符串与字节数组的相互转换。
import java.nio.charset.Charset;
import javax.xml.bind.DatatypeConverter;
public class Utils {
public static void main(String[] args) {
String input = "abcdefghijklmnopqrstuvwxyz";
byte[] bytes = string2bytes(input);
System.out.println(input.equals(bytes2string(bytes)));
String hex = "6162636465666768696A6B6C6D6E6F707172737475767778797A";
System.out.println(hex.equals(bytes2hex(bytes)));
String decode = bytes2string(hex2bytes(hex));
System.out.println(decode.equals(input));
}
public static byte[] string2bytes(String str) {
return str.getBytes(Charset.f