1. 程式人生 > >使用數字簽名實現資料庫記錄防篡改(Java實現)

使用數字簽名實現資料庫記錄防篡改(Java實現)

package com.hzj.security;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;

public class KeyPairUtil { // 採用的雙鑰加密演算法,既可以用DSA,也可以用RSA public static final String KEY_ALGORITHM = "DSA"; /** * 從輸入流中獲取KeyPair物件 * @param keyPairStream * @return */ public static KeyPair loadKeyPair(InputStream keyPairStream) { if (keyPairStream == null) { System.out.println(
"指定的輸入流=null!因此無法讀取KeyPair!"); return null; } try { ObjectInputStream ois = new ObjectInputStream(keyPairStream); KeyPair keyPair = (KeyPair) ois.readObject(); ois.close(); return keyPair; } catch (Exception e) { System.out.println(e.getMessage()); }
return null; } /** * 將整個KeyPair以物件形式儲存在OutputStream流中, 當然也可以將PublicKey和PrivateKey作為兩個物件分別存到兩個OutputStream流中, * 從而私鑰公鑰分開,看需求而定。 * @param keyPair 公鑰私鑰對物件 * @param out 輸出流 * @return */ public static boolean storeKeyPair(KeyPair keyPair, OutputStream out) { if ((keyPair == null) || (out == null)) { System.out.println("keyPair=" + keyPair + ", out=" + out); return false; } try { ObjectOutputStream oos = new ObjectOutputStream(out); oos.writeObject(keyPair); oos.close(); return true; } catch (FileNotFoundException e) { System.out.println(e.getMessage()); } catch (IOException e) { System.out.println(e.getMessage()); } return false; } /** * 生成KeyPair公鑰私鑰對 * * @return */ public static KeyPair initKeyPair() throws NoSuchAlgorithmException{ KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM); keyPairGen.initialize(1024); return keyPairGen.genKeyPair(); } /** * 生成金鑰,並存儲 * @param out * @return * @throws NoSuchAlgorithmException */ public static boolean initAndStoreKeyPair(OutputStream out) throws NoSuchAlgorithmException { return storeKeyPair(initKeyPair(), out); } }

相關推薦

使用數字簽名實現資料庫記錄篡改Java實現

package com.hzj.security; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream;

實現奇偶數排序演算法JAVA實現

給定一個整數陣列,請調整陣列的順序,使得所有奇數位於陣列前半部分,所有偶數位於陣列後半部分,時間複雜度越小越好。 package com.sort; import java.util.Arrays; public class TestSort { /** * 測試方法 * @par

Spark自定義累加器的實現需要注意的細節java

可以參考下面博文 !!!!!! 需要注意的是 ,原始碼中給出 也就是說兩個方法的實現是不一樣的。 下面是我的實現 import constant.Constants; import org.apache.spark.AccumulatorParam;

Selenium實現元素的拖拽java

【前言】        自從淘寶網登陸頁出現滑塊驗證,很多其他網站也在模仿這個滑塊驗證,在防止機器人惡意註冊方面確實起到一定的作用。 【關於滑塊的原理】:         響應時間,拖拽速度,時間

ChainDesk : 手把手教你實現簡易比特幣Java

  ChainDesk : 手把手教你實現簡易比特幣(Java版) 第一章:初識比特幣與區塊鏈 http://chaindesk.cn/columninfo.html?id=26&dirId=4=20190108meiti 第二章:密碼學hash函式

實現抓取網頁圖片JAVA實現

    最近學習網頁設計,想仿網路上的一個頁面,圖片素材一個一個地儲存起來太麻煩。就想著裡利用JAVA來實現一個小小的網頁圖片爬蟲,程式碼很簡單,不一會兒就實現了,但是當我訪問https協議的圖片時,一直報javax.net.ssl.SSLKeyException異常,到我儲

基於百度API,實現圖片文字識別功能Java

1、登入百度AI開放平臺     (1)在頂部導航欄中,找到控制檯選項,並選擇文字識別功能,進入管理中心頁面        (2)在管理中心頁面中,找到建立應用按鈕並點選   (3)填寫應用名名稱和應用描述,選擇相應的應用型別,勾選自己需要的介面服

用鄰接表和最小堆實現Dijkstra 最短路演算法 Java實現

演算法特點: 迪科斯徹演算法使用了廣度優先搜尋解決賦權有向圖或者無向圖的單源最短路徑問題,演算法最終得到一個最短路徑樹。該演算法常用於路由演算法或者作為其他圖演算法的一個子模組。 演算法的思路 Dijkstra演算法採用的是一種貪心的策略,宣告一個數

數組中只出現一次的數字java實現

num 整型 根據 長度 問題 程序 oid [] 情況 問題描述 一個整型數組裏除了兩個數字之外,其他的數字都出現了偶數次。請寫程序找出這兩個只出現一次的數字。 解題思路 如果數組中只有一個數字出現奇數次,則將數組中所有的數字做異或可得該數字。 數組中有兩個數

劍指Offer刷題筆記java實現_39.陣列中次數超過一半的數字

陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。 例如輸入陣列:{1,3,3,2,3,2,3,3,2}。由於2在陣列中出現了5次,超過陣列長度的一半,因此要輸出2。 三種解法: 第一種遍歷陣列,利用hashMap儲存每個數字出現的次數,時間複雜度O(n)

魔法web學習之旅~咒語記錄~忘記1

基本格式 <!DOCTYPE html> 版本 <html lang="en"> 使用語言 <head> 頭部     <meta charset="utf-8"> 字符集     <title></titl

Java實現資料庫表結構掃描,壞行壞列掃描實現

(Java實現)Cache資料庫表結構掃描,壞行壞列掃描實現 最近接觸了Cache資料庫,需要將海量資料通過sqoop抽取到hadoop平臺。但是發現一個問題,Cache資料庫是一個後關係型資料,底層是按照global進行存存的,表結構的定義通過preside

給定一個 32 位有符號整數,將整數中的數字進行反轉java實現最全面的

題目:給定一個 32 位有符號整數,將整數中的數字進行反轉。示例 1:輸入: 123 輸出: 321 示例 2:輸入: -123 輸出: -321注意:假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−231,  231 − 1]。根據這個假設,如果反轉後的整數溢

劍指offer程式設計題JAVA實現)——第40題:陣列中只出現一次的數字

github https://github.com/JasonZhangCauc/JZOffer 劍指offer程式設計題(JAVA實現)——第40題:陣列中只出現一次的數字

劍指offer程式設計題JAVA實現)——第37題:數字在排序陣列中出現的次數

github https://github.com/JasonZhangCauc/JZOffer 劍指offer程式設計題(JAVA實現)——第37題:數字在排序陣列中出現的次數

劍指offer程式設計題JAVA實現)——第28題:陣列中出現次數超過一半的數字

github https://github.com/JasonZhangCauc/JZOffer import java.util.Arrays; /** * * 劍指offer程式設計題(JA

tp5使用crontab實現資料庫的自動備份每分鐘、每小時、每天……

效果展示(每分鐘備份一次): 之前搞過一次資料庫自動備份,但是沒搞出來……後來得知Linux系統的一個命令:crontab。完美的解決了程式定時執行的難題 crontab詳解 一、cron服務 service crond start //啟動服務

給定一個十進位制正整數N,求出從1開始,到N的所有整數,數字1出現的次數java實現

【程式設計之美】給定一個十進位制正整數N,求出從1開始,到N的所有整數,數字1出現的次數。 例如,N=2,則兩個數為1,2 。數字1出現的個數是1. 又如n = 20.則20個數中1出現的為:1,10,11,12,13,14,。。。19 共有12個。 設計一個演算法

面試題3:陣列中重複的數字Java 實現

題目一:在一個長度為n的數組裡的所有數字都在0到n-1的範圍內。 陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意一個重複的數字。 例如,如果輸入長度為7的陣列{2,3,1,0,2,5,3},那麼對應的輸出是重複的數字2或者3。 方法一:時間

劍指offer之陣列中重複的數字Java實現

1. 陣列中重複的數字 題目描述 在一個長度為 n 的數組裡的所有數字都在 0 到 n-1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的,也不知道每個數字重複幾次。請找出陣列中任意一個重複的數字。 Input: {2, 3, 1, 0, 2,