通过数字签名来避免篡改的。一般思路如下:

1.将信息生成数字签名,并将数字签名用公私加密

2.用私钥解密数字签名,然后将信息再生成一次签名,将两个签名作比较得出结论

以下用JAVA模拟过程:首先生成一个公钥一个私钥,分别保存文件为 public.key和private.key;任给一个信息文件 demo.txt,用private.key生成数字签名(已加密),将签名存放于文件sign.sgn;用公私 public.key 验证数字签名。

签名算法选用DSA

注:本例仅对小数据可行,大数据会出现内存溢出。

import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java.security.Signature; public class P14_Key_Gener { //存放公钥 private String public_file = "D://public.key"; //存放私钥 private String private_file = "D://private.key"; //原始数据 private String indata = "D://demo.txt"; //数字签名文件 private String sign_file = "D://sign.sgn"; //签名算法 private String signatureAlgorithm = "DSA"; public static void main(String args[]) throws Exception { P14_Key_Gener pp = new P14_Key_Gener(); //第一步:创建公私钥文件 pp.createKey(); //第二步:用私钥对原始数据签名 pp.signGen(); //第三步:利用公私验证数字签名 pp.verify(); } /** * 生成一个公钥一个私钥,分别保存为文件public.key和private.key * @throws Exception */ public void createKey() throws Exception{ //定义public.key文件 FileOutputStream fos_public = new FileOutputStream(public_file); ObjectOutputStream oos_public = new ObjectOutputStream(fos_public); //定义private.key文件 FileOutputStream fos_private = new FileOutputStream(private_file); ObjectOutputStream oos_private = new ObjectOutputStream(fos_private); //形成DSA公私对 KeyPairGenerator keyGen = KeyPairGenerator.getInstance(signatureAlgorithm); keyGen.initialize(1024); //生成公钥和私钥对 KeyPair key = keyGen.generateKeyPair(); PublicKey publicKey = key.getPublic(); PrivateKey privateKey = key.getPrivate(); //写入文件 oos_public.writeObject(publicKey); oos_private.writeObject(privateKey); fos_public.close(); oos_public.close(); fos_private.close(); oos_private.close(); System.out.println("公私钥文件生成成功"); } /** * 对信息文件用private.key生成数字签名,将签名存放于signature.sgn * @throws Exception */ public void signGen() throws Exception{ File file_info = new File(indata); FileInputStream fis_info = new FileInputStream(file_info); int file_input_length = (int)file_info.length(); byte[] infoBytes = new byte[file_input_length]; fis_info.read(infoBytes); fis_info.close(); //读入私钥 FileInputStream fis_private = new FileInputStream(private_file); ObjectInputStream ois_private = new ObjectInputStream(fis_private); PrivateKey privateKey = (PrivateKey)ois_private.readObject(); ois_private.close(); fis_private.close(); //生成签名 Signature sig = Signature.getInstance(signatureAlgorithm); //用私钥初始化数字签名对象 sig.initSign(privateKey); //对数据实施签名 sig.update(infoBytes); //完成签名,将结果放入字节数组 byte[] signatureBytes = sig.sign(); //将签名写入文件sign.sgn FileOutputStream os_signature = new FileOutputStream(sign_file); os_signature.write(signatureBytes); os_signature.close(); System.out.println("签名文件生成成功"); } /** * 用公私验证数字签名 * @throws Exception */ public void verify() throws Exception{ //读取原文数据 File file_info = new File(indata); FileInputStream fis_info = new FileInputStream(file_info); int fileinfolength = (int)file_info.length(); byte[] fileBytes = new byte[fileinfolength]; fis_info.read(fileBytes); fis_info.close(); //读入公钥 FileInputStream fis_public = new FileInputStream(public_file); ObjectInputStream oos_public = new ObjectInputStream(fis_public); PublicKey publicKey = (PublicKey)oos_public.readObject(); fis_public.close(); oos_public.close(); //读入签名文件 File file_sign = new File(sign_file); FileInputStream fis_sig = new FileInputStream(file_sign); int sign_length = (int)file_sign.length(); byte[] signBytes = new byte[sign_length]; fis_sig.read(signBytes); fis_sig.close(); //使用公私验证 Signature sig = Signature.getInstance(signatureAlgorithm); sig.initVerify(publicKey); //对msgBytes重新实施签名 sig.update(fileBytes); if(sig.verify(signBytes)) { System.out.println("文件没有被篡改"); }else{ System.out.println("文件被篡改"); } } }

用数字签名实现防篡改相关推荐

  1. 对称加密、非对称加密、DES、AES、RSA、OpenSSL、数字签名、防篡改

    本公众号分享的所有技术仅用于学习交流,请勿用于其他非法活动,如果错漏,欢迎留言指正 <加密与解密>第4版 加解密 安全领域的重要分支和基础设施 互联网重要数据的传输需要加解密 TCP/IP ...

  2. 目前基于区块链的档案防篡改系统的设计如何实现防篡改

    架构设计图 分析 为了保障档案数据的安全性和隐私性,存储档案附件和档案属性存储加密存储在私有IPFS集群,档案的IPFS地址和数字指纹存储在私有区块链上.公有区块链定期存储和检查私有区块链最新不可逆区 ...

  3. 一篇文章带你看懂以及实现加解密技术中的信息防篡改、一码一检、过期失效、多种实现方式

    一篇文章带你看懂以及实现加解密技术中的信息防篡改.一码一检.过期失效.多实现方式 导语 一.简介 二.代码功能介绍以及源码 2.1.AbstractRsa 类 2.2 RsaUtils 类 2.3 R ...

  4. 网路游侠:用防篡改和WAF保护网站安全

    前几天也给大家说过WEB应用防火墙,包括软件的和硬件的,今天网路游侠再给大家推荐个产品,当然这个是二合一的,就是:网页防篡改+WEB应用防火墙.比较有特色,好了,废话不说,正文开始: 安装就跳过了,相 ...

  5. UnisGuard防篡改产品了解

    1 UnisGuard采用基于文件驱动级的保护技术--内核事件触发保护机制,确保系统资源不被浪费.不同于其他防篡改软件的Web事件触发机制,UnisGuard的页面防篡改模块采用的是与操作系统底层文件 ...

  6. php重放,Api 接口安全-防篡改,防重放理解总结

    防篡改 为什么要防篡改 http 是一种无状态的协议, 服务端并不知道客户端发送的请求是否合法, 也并不知道请求中的参数是否正确 举个栗子, 现在有个充值的接口, 调用给用户对应的余额 http:// ...

  7. 江翰网页防篡改系统解决方案--前言

    前言 在电子商务.电子政务日益普及的今天,网站已成为企事业单位.政府机关的形象窗口,也是对外开展业务.提供服务的重要手段.网站页面被篡改,不仅将影响正常业务的开展,而且对企业形象.政府信誉带来极其不好 ...

  8. 怎样用CDN防篡改、抗攻击、控内容?一份CDN安全指南请查收

    5大安全产品全面升级,抢先了解:https://developer.aliyun.com/topic/securityapril 预约观看发布会:https://yq.aliyun.com/live/ ...

  9. 区块如何防篡改_深入浅出:一条数据是如何完成上链的

    一笔业务数据在区块链处理的流程大致分为三个阶段:分别是上链前处理阶段.链上处理阶段和智能合约处理阶段. 一.上链前处理阶段 业务数据上链前需要将业务数据处理,并且对信息进行签名.这些过程可以通过对应的 ...

最新文章

  1. 怎么可以查到AD里面长时间没有登录的帐号
  2. Python算法实战系列:栈
  3. Asp.net(C#)-彩色图片转化为黑白
  4. 【温故知新】CSS学习笔记(三大特性)
  5. This version of MySQL doesn't yet support 'LIMIT IN/ALL/ANY/SOME subquery 解决方法
  6. 开发者中的领导与管理(译文)
  7. 清北学堂2018年1月省选强化班模拟考试1
  8. JavaScript高级程序设计4.pdf
  9. OpenProj: The OpenSource Solution for Managing Your Projects
  10. 80核处理器_【装机帮扶站】第338期:95元的6核心12线程处理器
  11. 盘点 6 个开源的音乐播放器!
  12. 编程题(买帽子求第三便宜价格)
  13. WordPress完美删除页脚自豪地采用WordPress和Proudly powered by WordPress(页尾footer.php)
  14. 单链表操作之合并两个单链表
  15. 解决:steps/make_fbank.sh: line 132: run.pl: command not found
  16. 安装Linux Mint 17后要做的20件事
  17. 渗透信息收集 子域名查询
  18. python 病毒 文件复制_python病毒
  19. 如何避免网站改版造成的排名影响
  20. 一体化计算机接口,4.机电一体化计算机接口设计(下).ppt

热门文章

  1. Html和Xml中注释符
  2. Kubernetes K8S之存储Volume详解
  3. grpc入门到精通_gRPC[go语言]大师教程,构建现代化Api和微服务
  4. 神经网络在通信中的应用,神经网络技术及其应用
  5. CTR/CVR预测模型的特征怎么找?不同类型特征怎么处理?序列Embedding特征怎么用?
  6. web前端框架——Vue的特性
  7. 实训报告万能模板计算机专业,计算机专业实习报告模板
  8. tabindex的使用
  9. STM32L431 立即睡眠模式(代码+讲解)
  10. 任务整理总结(7.5)