1. 程式人生 > >使用橢圓曲線進行加密解密

使用橢圓曲線進行加密解密

來源:http://blog.csdn.net/lff0305/article/details/49492711

JDK中自帶了橢圓曲線的簽名,但是沒有實現橢圓曲線的加密解密。不過bouncycastle庫實現了,下面的程式碼需要bouncycastle庫。

需要做的準備工作:

1. 去JDK的下載頁面,下載

Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files for JDK/JRE 8

這個東西。這個是為了解除預設JDK中的加密強度的限制。不使用這個可能會報錯。 2. 下載bouncycastle的jar檔案,加入classpath中。 最後是程式碼了。比較簡單。見下文。在此比較下EC和RSA的優缺點: RSA的優點:JDK自己支援。不需要第三方庫。同時支援RSA的開發庫也很多(最典型的就是OpenSSL) EC的缺點:需要第三方庫,需要更新(1)的檔案,支援的廣度比不上RSA。 EC的優點:1,在達到相同加密程度下,EC需要的祕鑰長度比RSA要短得多                       2,bouncycastle實現的EC加密演算法,對密文長度的限制比較鬆。在下面的測試程式中構造了一個長字串加密,沒有報錯。RSA的加密則是有限制的,必須分片。不過我不知道是不是bouncycastle自己事先做了分片。
  1. import
     java.security.KeyPair;  
  2. import java.security.KeyPairGenerator;  
  3. import java.security.SecureRandom;  
  4. import java.security.Security;  
  5. import javax.crypto.Cipher;  
  6. import org.bouncycastle.jce.interfaces.ECPrivateKey;  
  7. import org.bouncycastle.jce.interfaces.ECPublicKey;  
  8. publicclass ECTest {  
  9.     static
     {  
  10.         Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());  
  11.     }  
  12.     publicstaticvoid main(String[] argu) throws Exception {  
  13.         KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("EC",  
  14.                 "BC");  
  15.         keyPairGenerator.initialize(256
    new SecureRandom());  
  16.         KeyPair kp = keyPairGenerator.generateKeyPair();  
  17.         ECPublicKey publicKey = (ECPublicKey) kp.getPublic();  
  18.         ECPrivateKey privateKey = (ECPrivateKey) kp.getPrivate();  
  19.         System.out.println(kp.getPrivate());  
  20.         System.out.println(kp.getPublic());  
  21.         Cipher encrypter = Cipher.getInstance("ECIES""BC");  
  22.         Cipher decrypter = Cipher.getInstance("ECIES""BC");  
  23.         encrypter.init(Cipher.ENCRYPT_MODE, publicKey);  
  24.         decrypter.init(Cipher.DECRYPT_MODE, privateKey);  
  25.         String text = "";  
  26.         for (int i = 0; i < 1024; i++) {  
  27.             text += "This is a [email protected]#$This is a [email protected]#$This is a [email protected]#This is a [email protected]#$This is a [email protected]#$This is a [email protected]#This is a [email protected]#$This is a [email protected]#$This is a [email protected]#";  
  28.         }  
  29.         byte[] e = encrypter.doFinal(text.getBytes("UTF-8"));  
  30.         // System.out.println("Encrypted: " + Arrays.toString(e));
  31.         System.out.println("Encrypted, length = " + e.length);  
  32.         byte[] de = decrypter.doFinal(e);  
  33.         String result = new String(de, "UTF-8");  
  34.         // System.out.println("Decrypted :" + result);
  35.         if (result.equals(text)) {  
  36.             System.out.println("OK!");  
  37.         }  
  38.     }  
  39. }  

相關推薦

使用橢圓曲線進行加密解密

來源:http://blog.csdn.net/lff0305/article/details/49492711 JDK中自帶了橢圓曲線的簽名,但是沒有實現橢圓曲線的加密解密。不過bouncycastle庫實現了,下面的程式碼需要bouncycastle庫。 需要做

Java小案例——對字符串進行加密解密

i++ 個數 color class 異或運算 揭秘 println scanner 英文 要求:   * 對用戶輸入的每個字符的值進行加密,將解密後的字符串輸出   * 對用戶輸入的已加密字符串進行解密並輸出 實現代碼: import java.util.Sca

PHP開發接口使用RSA進行加密解密方法

var_dump nbsp case trre 處理 ice func var microsoft 網絡安全問題很重要,尤其是保證數據安全,遇到很多在寫接口的程序員直接都是明文數據傳輸,在我看來這是很不專業的。本人提倡經過接口的數據都要進行加密解密之後進行使用。

通過php base64函數進行加密解密

process 剛才 com 定義 code pst alt watermark ext 通過php base64函數進行加密解密 實驗環境:windowsphp環境 (phpStudy一鍵環境包) 把測試的php文件放到此目錄下

javascript與php使用aes進行加密/解密

cbc base scrip == pad encode ini echo script javascript:a. 下載: npm install crypto-js b. 代碼: var CryptoJS = require("crypto-js"); // 加密

Java使用AES演算法進行加密解密

一、加密 /** * 加密 * @param src 源資料位元組陣列 * @param key 金鑰位元組陣列 * @return 加密後的位元組陣列 */ public static byte[] Encrypt(byte[] src, b

PHP開發介面使用RSA進行加密解密方法

版權宣告:轉載時請標註http://blog.csdn.net/zhihua_w    https://blog.csdn.net/Zhihua_W/article/details/74002212          網路安全問題很重要,尤其是保證資料安全,遇到很多在寫介面的

比特幣錢包地址的概念以及SHA256和橢圓曲線乘法加密演算法的詳解

比特幣錢包,金鑰,地址 錢包就是金鑰所在之處,錢包是私鑰的容器,通過有序檔案或者簡單的資料庫實現或者用原有的私鑰通過單向雜湊函式生成每一個新的私鑰,並將新的金鑰順序連線。 比特幣錢包包含的是私鑰而不是比特幣,一個使用者可以有一個或者多個私鑰的錢包,錢包中含有成對的私鑰和公鑰

使用AES演算法對檔案進行加密解密(JAVA+Eclipse)

一、專案中引用第三方類庫的方法    Bouncy Castle類庫的用法(如何在自己的專案中使用第三方類庫)    1)手動配置    將.jar,src,javadoc拷到專案目錄下   專案名,右鍵選build path-configure build path   

潤乾報表V4超連結中對引數進行加密解密

眾所周知,潤乾本身自帶的引數模板會將引數統一放到引數池中,通過url傳遞引數池ID來進行引數傳遞,而不是直接將引數直接暴露在位址列中。可是在報表中的超連結功能,我們通常是將拼好的url寫上進行報表的鑽取,這時會發現鑽取中的url是全部展現在外面的,如何對這個url進行安全處

PHP使用DES進行加密解密

 DES是一種對稱加密演算法,也就是通過密文和合法的金鑰能夠將明文還原出來,在程式開發過程中有些介面 可能需要獲取原始資料,而傳送的資料又比較敏感(比如使用者的密碼等資訊),這時可以選擇DES加密演算法,DES的安全性還算可靠,只要加密金鑰不洩露,目 前破解的方法只有窮舉法進行破解。       

關於密碼中的RSA演算法和ecc(橢圓曲線)演算法加密過程是怎樣的?

作者:Kalafinaian 連結:https://www.zhihu.com/question/26662683/answer/325511510 來源:知乎 著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。   Oblivious 何処へ行くの

使用openssl命令進行加密解密及雜湊運算的命令列

/*********************************************************************  * Author  : Samson  * Date    : 01/05/2014  * Test platform:  *               3.6.1

在Springboot中通過jasypt 進行加密解密

1. 用途 在SpringBoot中,通過jasypt可以進行加密解密. 這個是雙向的, 且可以配置金鑰. 2.使用: 2.1 通過UT建立工具類,並認識jasypt import org.jasypt.util.text.BasicTextEncryptor; im

spring下jdbc配置檔案進行加密解密

<div id="cnblogs_post_body"><p>最近做一個專案,安全上有點要求,就是要對資料庫相關的配置進行加密,配置檔案如下:</p> <div class="cnblogs_code"><div cla

Java中利用RSA演算法進行加密解密

首先需要兩個工具類 package cnsts.common.utils; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.IOException; i

Android中是用Base64進行加密解密

// 加密傳入的資料是byte型別的,並非使用decode方法將原始資料轉二進位制,String型別的資料 使用 str.getBytes()即可       String str = "Hello!";       // 在這裡使用的是encode方式,返回的是by

C#對文件進行加密解密源碼

ide toe flush decrypt file pro pre and provide 如下的代碼段是關於C#對文件進行加密解密的代碼,應該是對小夥伴們有些幫助。 using System;using System.IO;using System.Security.C

什麽是私有密鑰密碼技術——密鑰加密算法采用同一把密鑰進行加密解密

解密 網絡安全 位操作 線性復雜 對稱 大量 控制 全局 相位 什麽是私有密鑰密碼技術 私有密鑰(Symmetric Key),又叫對稱密鑰。密鑰加密算法采用同一把密鑰進行加密和解密。它的優點是加密和解密速度非常快,但密鑰的分發和管理比較困難。信息的發送者和接收者必須明確同

利用RSACryptoServiceProvider進行RSA加密解密

rop color ria keyvalue ngs eat splay null crypto 利用RSACryptoServiceProvider進行RSA加密解密 加密獲取公私鑰 static void Main(string[] args)