大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 寫一個Java加密工具

寫一個Java加密工具

更新時間:2021-10-21 10:17:23 來源:動力節點 瀏覽873次

Java加密工具是Java開發工具之一,java安全包下有很多加密算法類,我們可以簡單的調用它們。它們雖然功能齊全,但使用起來有點麻煩。在這里封裝了一些常用的加密算法及其常用方法,以簡化代碼。

工具類的結構如下:

調用步驟:

1.client為調用類,統一調用encrypfacade。通過相應的門面對象加密方法,可以選擇構建對稱、非對稱等加密門面對象。

2.對稱加密和非對稱加密都需要密鑰。構造時生成密鑰,然后構造對象(HMAC比較特殊,是一種需要公鑰加密的哈希算法)。這些對象是使用外觀對象中的構建器結束方法構造的。其他加密算法直接使用OtherFacade對象的對應方法來實現加解密。OtherFacade 會根據具體的方法調用具體的加密對象的方法,這些加密對象會調用各自的句柄。

3.使用builder方法獲取加密對象,然后調用具體方法實現加解密。這些方法在它們相互調用的處理程序中。

優勢:

雖然我們在開發中一般不會用到很多加密算法,但是每個類的成員都會做延時加載,調用的時候會生成實例對象,所以我們不用擔心類的擴展。相反,我們更容易擴展它。

例子

1.Base64的使用

String text = "123qwe!@#" ;
OtherFacade otherFacade = EncrypFacade.getOtherFacade();
String base64 = otherFacade.Base64(text);
System.out.println("base64 加密后的密文為:"+ base64);
String base64Decrypt = otherFacade.Base64Decrypt(base64);
System.out.println("base64解密后的明文為:"+base64Decrypt);
  byte[] data = "123qwe!@#".getBytes();
  System.out.println("數據:"+Arrays.toString(data));
  OtherFacade otherFacade = EncrypFacade.getOtherFacade();
  byte[] base64 = otherFacade.Base64(data);
  System.out.println("Base64 加密字節數組的結果為:"+Arrays.toString(base64));
  byte[] base64Decrypt = otherFacade.Base64Decrypt(base64);
  System.out.println("Base64字節數組解密結果為:"+Arrays.toString(base64Decrypt));

2.MD5的使用

String text = "123qwe!@#" ;
OtherFacade otherFacade = EncrypFacade.getOtherFacade();
String md5 = otherFacade.MD5(text);
System.out.println( "md5 加密后的密文為:"+md5);
  byte[] data = "123qwe!@#".getBytes();
  System.out.println("數據:"+Arrays.toString(data));
  OtherFacade otherFacade = EncrypFacade.getOtherFacade();
  byte[] md5 = otherFacade.MD5(data);
  System.out.println("md5 加密字節數組的結果為:"+Arrays.toString(md5));

3.沙的使用

String text = "123qwe!@#" ;
OtherFacade otherFacade = EncrypFacade.getOtherFacade();
String sha = otherFacade.SHA(text);
System.out.println( "SHA加密后的密文為:"+sha);
byte[] data = "123qwe!@#".getBytes(); 
System.out.println("數據:"+Arrays.toString(data)); 
OtherFacade otherFacade = EncrypFacade.getOtherFacade(); 
byte[] sha = otherFacade.SHA(data); 
System.out.println("SHA加密字節數組的結果為:"+Arrays.toString(sha));

4.CP的使用

該加密算法為自制算法。它實際上是其他加密的混合版本。

下面的例子是可以解密的CP加密。加密時先用base64,再用innovation。解密的時候,創新是我隨意起的名字。

String text = "123qwe!@#" ;
OtherFacade otherFacade = EncrypFacade.getOtherFacade();
String cp = otherFacade.CP(text);
System.out.println( "CP 加密后的密文為:"+ cp);
String cpDecrypt = otherFacade.CPDecrypt(cp);
System.out.println( "CP解密后的明文為:"+cpDecrypt);

以下示例是不可逆加密。它使用了四種多重加密算法,MD5、Base64、SHA 和創新。這些算法的加密順序由用戶定義的內部算法的salt值決定。也就是說,加密后的明文是一樣的,不同的salt值會導致不同的密文。

String text = "123qwe!@#" ;
String salt = "userName" ;
OtherFacade otherFacade = EncrypFacade.getOtherFacade();
String cp = otherFacade.CP(salt, text);
System.out.println( "CP 加密后的密文為:"+cp);

5.HMAC的使用

String text = "123qwe!@#" ;
OtherFacade otherFacade = EncrypFacade.getOtherFacade();
HMAC hmac1 = otherFacade.HMACBuilder();
SymmetryKey key = hmac1.getKey();
System.out.println( "HMAC 生成的密鑰為:"+ key.getPublicKey());
字符串 encrypt1 = hmac1.Encrypt(text);
System.out.println( "A使用HMAC加密結果為:"+ encrypt1);
//模擬 A 將密鑰傳遞給 B 
HMAC hmac2 = otherFacade.HMACBuilder(key);
// HMAC hmac2 = otherFacade.HMACBuilder(key.getPublicKey()); //同上
String encrypt2 = hmac2.Encrypt(text);
System.out.println( "B 使用 HMAC 加密結果為:"+encrypt2);
byte [] data = "123qwe!@#" .getBytes ();
System.out.println( "數據:"+ Arrays.toString(data));
OtherFacade otherFacade = EncrypFacade.getOtherFacade();
HMAC hmac1 = otherFacade.HMACBuilder();
SymmetryKey key = hmac1.getKey();
System.out.println( "HMAC 生成的密鑰為:"+ key.getPublicKey());
字節[] encrypt1 = hmac1.Encrypt(data);
System.out.println( "一個使用HMAC加密的字節數組的結果是:"+ Arrays.toString(encrypt1));
//模擬 A 將密鑰傳遞給 B 
HMAC hmac2 = otherFacade.HMACBuilder(key);
// HMAC hmac2 = otherFacade.HMACBuilder(key.getPublicKey()); //同上
byte [] encrypt2 = hmac2.Encrypt(data);
System.out.println( "B 使用 HMAC 加密字節數組的結果為:"+Arrays.toString(encrypt2));

6.AES的使用

String text = "123qwe!@#" ;
SymmetryFacade symmetryFacade = EncrypFacade.getSymmetryFacade();
AES aes1 = symmetryFacade.AESBuilder(); 
SymmetryKey key = aes1.getKey();
System.out.println( "AES 生成的密鑰為:"+ key.getPublicKey());
String encrypt = aes1.Encrypt(text);
System.out.println( "A使用AES加密結果為:"+ encrypt);
//模擬 A 將密鑰傳遞給 B 
AES aes2 = symmetryFacade.AESBuilder(key);
// AES aes2 = symmetryFacade.AESBuilder(key.getPublicKey()); //同上
字符串解密 = aes2.Decrypt(encrypt);
System.out.println( "B使用AES解密結果為:"+decrypt);
byte [] data = "123qwe!@#" .getBytes ();
System.out.println( "數據:"+ Arrays.toString(data));
SymmetryFacade symmetryFacade = EncrypFacade.getSymmetryFacade();
AES aes1 = symmetryFacade.AESBuilder();
SymmetryKey key = aes1.getKey();
System.out.println( "AES 生成的密鑰為:"+ key.getPublicKey());
byte [] encrypt = aes1.Encrypt(data);
System.out.println( "A使用AES加密結果為:"+ Arrays.toString(encrypt));
//模擬 A 將密鑰傳遞給 B 
AES aes2 = symmetryFacade.AESBuilder(key);
// AES aes2 = symmetryFacade.AESBuilder(key.getPublicKey()); //同上
字節[] 解密 = aes2.Decrypt(encrypt);
System.out.println( "B使用AES解密結果為:"+Arrays.toString(decrypt));

7.資源的使用

我們先來了解一下數字簽名和非對稱加密的過程

(1)數字簽名:

數字簽名是對手寫簽名的模擬,用于保證信息傳輸的完整性、發送方的身份認證、防止交易中的抵賴。

公鑰簽名系統的基本思想如下:

1)發件人A用自己的私鑰對信息進行加密,對文件進行簽名

2)將簽署的文件發送給接收方 B

3)B 使用 A 的公鑰(可以從 CA 機構等渠道獲得)對文件進行解密,從而驗證簽名。

(2)非對稱加密過程

A和B之間需要加密通信,非對稱加密過程如下:

1)A 和 B 都需要生成一對加解密密鑰進行加解密

2)A 生成一對密鑰,并將公鑰公開給其他方。將公鑰傳遞給 B 并保留私鑰。B 將公鑰傳輸給 A 并保留私鑰。

3)當 A 向 B 發送 A 消息時,它用 B 的公鑰對消息進行加密,然后將密文發送給 B

4)B收到A發來的消息后,用自己的私鑰解密

注意:A 和 B 只能使用他們的私鑰加密任何由他們的公鑰加密的信息。

String text = "123qwe!@#" ;
NoSymmetryFacade noSymmetryFacade = EncrypFacade.getNoSymmetryFacade();
// 512 是公鑰的長度。理論上,長度越長,越難開裂。如果不填參數,則默認為1024。如果小于512,則使用默認值
RSA res1 = noSymmetryFacade.RESBuilder(512 );
NoSymmetryKey key1 = res1.getKey();
RSA res2 = noSymmetryFacade.RESBuilder(512 );
NoSymmetryKey key2 = res2.getKey();
//交換 publicKey 
res1.setKey(key2);
res2.setKey(key1);
// res1.setKey(key2.getPublicKey()); //同上
// res2.setKey(key1.getPublicKey()); //同上
// A 先用 B 再用自己的私鑰加密
String privateEncrypt = res1.privateEncrypt(res1.publicEncrypt(text));
//生成簽名
String sign1 = res1.sign(privateEncrypt);
System.out.println( "A的RSA公鑰為:"+ key1.getPublicKey());
System.out.println( "B的RSA公鑰為:"+ key2.getPublicKey());
System.out.println( "A 的 RSA 簽名為:"+ sign1);
System.out.println( "一個使用RSA加密的數據是:"+ privateEncrypt);
// B 獲取簽名和加密數據
//先驗證簽名,判斷數據是否有變化
if (res2.verify(privateEncrypt, sign1)){
     //然后解密
    //先用 A 解密 B 的公鑰 Decrypt與加密相反的私鑰
    String publicDecrypt = res2.privateDecrypt(res2.publicDecrypt(privateEncrypt));
    System.out.println( "B 使用 RSA 解密后的數據為:"+ publicDecrypt);
}
byte [] data = "123qwe!@#" .getBytes ();
System.out.println( "數據:"+ Arrays.toString(data));
NoSymmetryFacade noSymmetryFacade = EncrypFacade.getNoSymmetryFacade();
// 512 是公鑰的長度。理論上,長度越長,越難開裂。如果不填參數,則默認為1024。如果小于512,則使用默認值
RSA res1 = noSymmetryFacade.RESBuilder(512 );
NoSymmetryKey key1 = res1.getKey();
RSA res2 = noSymmetryFacade.RESBuilder(512 );
NoSymmetryKey key2 = res2.getKey();
//交換 publicKey 
res1.setKey(key2);
res2.setKey(key1);
// res1.setKey(key2.getPublicKey()); //同上
// res2.setKey(key1.getPublicKey()); //同上
// A 先用 B 然后用自己的私鑰加密
byte [] privateEncrypt = res1.privateEncrypt(res1.publicEncrypt(data));
//生成簽名
字節[] sign1 = res1.sign(privateEncrypt);
System.out.println( "A的RSA公鑰為:"+ key1.getPublicKey());
System.out.println( "B的RSA公鑰為:"+ key2.getPublicKey());
System.out.println( "A 的 RSA 簽名為:"+ Arrays.toString(sign1));
System.out.println( "一個使用RSA加密的數據是:"+ Arrays.toString(privateEncrypt));
// B 獲取簽名和加密數據
//先驗證簽名,判斷數據是否有變化
if (res2.verify(privateEncrypt, sign1)){
     //然后解密
    //先用 A 解密 B 的公鑰 Decrypt與加密
    字節相反的私鑰[] publicDecrypt = res2.privateDecrypt(res2.publicDecrypt(privateEncrypt));
    System.out.println( "B 使用 RSA 解密后的數據為:"+ Arrays.toString(publicDecrypt));
}

大家如果對此感興趣,想了解更多相關知識,可以來關注一下動力節點的Java在線學習,里面有更多的知識在等著大家去學習,相信對大家會有一定的幫助。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 最新国产精品好看的国产精品 | 日韩在线1 | 亚洲人和日本人hd | 天天射综合网站 | 国产伦一区二区三区免费 | 欧美成人三级一区二区在线观看 | s级毛片 | 国产特黄一级毛片特黄 | 亚洲swag精品自拍一区 | 牛牛影视午夜免费福利 | 欧美a一片xxxx片 | 久久国产精品视频一区 | 麻豆国内精品久久久久久 | 精品国产综合成人亚洲区 | 亚洲视频在线观看视频 | 五月网婷婷| 久久国产精品99精品国产987 | 国产日韩精品一区二区 | 91资源在线播放 | 综合色亚洲| 日韩欧美亚洲国产精品字幕久久久 | 综合国产在线 | 久久久久久久久亚洲 | 一区二区三区美女视频 | 九九视频免费精品视频免费 | 精品国产一区二区三区四区不 | 日韩一区二区精品久久高清 | 日韩欧美高清视频 | 久久久青草青青国产亚洲免观 | 狠狠成人| 午夜免费看| 国产一区二区三区毛片 | 99久久这里只精品国产免费 | 99热久久这里只有精品9 | 久青草中文字幕精品视频 | 日韩精品成人免费观看 | 99视频在线国产 | 亚洲成人在线视频 | 国产乱人视频在线播放不卡 | 久久国内 | 色综合网亚洲精品久久 |