使用数字签名实现数据库记录防篡改(Java实现)

2019-12-30 16:12:08丽君

StringHelper类:


package com.hzj.util;
import sun.misc.BASE64Encoder;
import sun.misc.BASE64Decoder;
public class StringHelper {
 /** 
 * BASE64Encoder 加密 
 * @param data 要加密的数据 
 * @return 加密后的字符串 
 */ 
 public static String encryptBASE64(byte[] data) { 
 BASE64Encoder encoder = new BASE64Encoder(); 
 String encode = encoder.encode(data); 
 return encode; 
 } 
 /** 
 * BASE64Decoder 解密 
 * @param data 要解密的字符串 
 * @return 解密后的byte[] 
 * @throws Exception 
 */ 
 public static byte[] decryptBASE64(String data) throws Exception { 
 BASE64Decoder decoder = new BASE64Decoder(); 
 byte[] buffer = decoder.decodeBuffer(data); 
 return buffer; 
 } 
}

Program类:


package com.hzj.main;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.security.NoSuchAlgorithmException;
import com.hzj.security.DataSecurity;
import com.hzj.security.KeyPairUtil;
public class Program {
 public static void main(String[] args) {
 // 1.生成证书
// File file = new File("ca.key");
// try {
// FileOutputStream fileOutputStream = new FileOutputStream(file);
// KeyPairUtil.initAndStoreKeyPair(fileOutputStream);
// } catch (FileNotFoundException | NoSuchAlgorithmException e) {
// e.printStackTrace();
// }
 // 2.生成数字签名
// DataSecurity dataSecurity = new DataSecurity();
// String sign = dataSecurity.sign("大家好");
// System.out.println("sign:" + sign);
 //3.验证数字签名
 DataSecurity dataSecurity = new DataSecurity();
 boolean result = dataSecurity.verifySign("大家好", "MCwCFCDs3sBw/fXK9flndl0M5lAUiPYFAhR9vyNNc91UiUBxFwK3GzLLjWgTkQ==");
 System.out.println("result:" + result);
 }
}

这里需要注意的是,为什么要对数字签名进行进行Base64编码呢?这是因为生成的数字签名是byte[]型的,无论对应哪一种字符集来转化成String,都会有乱码出现。所以,采用Base64进行编码,就可以得到一串可见的字符串,方便存储和重新调用。

五、后记

写到这里,本文的内容就基本上完结了。有人看到这里就会问,这不是说数据库记录防篡改嘛,一直都在讲数字签名,究竟怎么个防篡改?前文已经对数字签名的一些基本原理,使用的场景,开发的步骤、代码等进行了描述,开篇是也描述了项目中遇到的数据库中的问题。将这些信息综合起来,应该就知道怎么将数字签名应用到数据库记录中来作为数据库防篡改的工具了。知道工具怎么用是基础,会用工具来完成自己想做的事情,就是进阶了。祝你步步高升!

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持ASPKU!


注:相关教程知识阅读请移步到c#教程频道。