日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java对称加密,java异或加密,Java高性能对称加密

發布時間:2024/10/5 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java对称加密,java异或加密,Java高性能对称加密 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?學過網絡安全的可能知道加密可分為對稱加密與非對稱加密,比如大名鼎鼎的ssh。非對稱加密有RSA,sm9等,對稱加密有DES,sm4算法等,但是計算機基礎比較扎實的可能知道一個值a與值b異或操作2次后可以恢復原值,這一點是很容易證明的,異或操作可以實現非常簡單高效安全的對稱加密,值b就是對稱密鑰。

美國數學家香農證明只要滿足以下兩個條件,XOR 加密就無法破解

  • key(對稱密鑰)的長度大于等于message(原文)
  • key必須是一次性的,且每次都要隨機產生

原理就是如果每次的key都是隨機的,那么產生的密文具有所有可能的值,而且是均勻分布,無法從密文看原文的任何特征。

異或加密性能非常優異,加密性能百倍于主流對稱加密算法AES。

java實現如下:

/*** @description:異或操作對稱加解密* @param text 原文或者密文* @param xorKey 異或運算密鑰* @exception RuntimeException* @return java.lang.String*/public static String getXorString(String text, String xorKey){char[] textChars = text.toCharArray(), keyChars = xorKey.toCharArray();char[] cipherChars = new char[ textChars.length ];for (int i = 0; i < keyChars.length; i++) {if (textChars.length <= i) break;cipherChars[i] = (char) (textChars[i] ^ keyChars[i]);}//文本超出xor密鑰長度的部分再次去xor加密if (textChars.length > keyChars.length){char[] remainTextChars = new char[textChars.length - keyChars.length];System.arraycopy(textChars, keyChars.length, remainTextChars, 0, textChars.length - keyChars.length);char[] remainCipherChars = getXorString(new String(remainTextChars), xorKey).toCharArray();System.arraycopy(remainCipherChars, 0, cipherChars, keyChars.length, remainCipherChars.length);return new String(cipherChars);}return new String(cipherChars);}

與主流對稱加密算法AES性能對比:

1.?異或加密

2.AES加密

3.AES加解密代碼

/*** @description:cbc模式加密* @date 9:39 2022/3/24* @param key 密鑰* @param input 原文* @return java.lang.String*/public static String encryptCbc(String key, String input){byte[] result = encryptCbc(key.getBytes(), input.getBytes());return Base64.getEncoder().encodeToString(result);}/*** @description:cbc模式加密* @date 9:39 2022/3/24* @param key 密鑰* @param input 原文* @return byte[]*/public static byte[] encryptCbc(byte[] key, byte[] input) {try {Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");SecretKeySpec keySpec = new SecretKeySpec(key, "AES");// CBC模式需要生成一個16 bytes的initialization vector:SecureRandom sr = SecureRandom.getInstanceStrong();byte[] iv = sr.generateSeed(16);IvParameterSpec ivps = new IvParameterSpec(iv);cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivps);byte[] data = cipher.doFinal(input);// IV不需要保密,把IV和密文一起返回:return join(iv, data);} catch (GeneralSecurityException ex){throw new RuntimeException(ex);}}private static byte[] join(byte[] bs1, byte[] bs2) {byte[] r = new byte[bs1.length + bs2.length];System.arraycopy(bs1, 0, r, 0, bs1.length);System.arraycopy(bs2, 0, r, bs1.length, bs2.length);return r;}/*** @description:cbc模式解密* @date 9:39 2022/3/24* @param key 密鑰* @param input 密文* @return java.lang.String*/public static String decryptCbc(String key, String input){byte[] result = decryptCbc(key.getBytes(), Base64.getDecoder().decode(input));return new String(result);}/*** @description:cbc模式解密* @date 9:39 2022/3/24* @param key 密鑰* @param input 密文* @return byte[]*/public static byte[] decryptCbc(byte[] key, byte[] input) {// 把input分割成IV和密文:byte[] iv = new byte[16];byte[] data = new byte[input.length - 16];System.arraycopy(input, 0, iv, 0, 16);System.arraycopy(input, 16, data, 0, data.length);// 解密:try {Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");SecretKeySpec keySpec = new SecretKeySpec(key, "AES");IvParameterSpec ivps = new IvParameterSpec(iv);cipher.init(Cipher.DECRYPT_MODE, keySpec, ivps);return cipher.doFinal(data);} catch (GeneralSecurityException ex){throw new RuntimeException(ex);}}

?

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的java对称加密,java异或加密,Java高性能对称加密的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。