数字签名及验签

一般情况,为了证明文件或信件从源端通过网络传输到目的端未被人为篡改,通常采用数字签名的技术。

通过如下简单几步实现数据签名及验签。

发送方数字签名过程:

发送者通过散列函数将带发送的数据加工成散列值;

发送者用私钥对散列值进行加密生成一段数字签名;

发送者将待发送数据、数字签名、存有公钥的证书一并发送给接受者。

接受方验签过程:

提取出接收到的明文数据,用散列函数加工成散列值;

用从信任签名者证书中提取的公钥,将数字签名字串解密成散列值;

将第一步和第二部中的散列值进行比对,若比对一致则验签成功,反之信息被篡改。

下图是数字签名及验签处理流程图:

Checksum 校验和

除了数字签名之外,有没有一种简单的用于在相对安全的环境下,校验传送文件完整性的方法呢?

不需要证书也不需要解密,可以简单通过 Checksum 校验和实现。

以下说明来自维基百科:

校验和(英语:Checksum)是冗余校验的一种形式。 它是通过错误检测方法,对经过空间(如通信)或者时间(如计算机存储)传送的数据的完整性进行检查的一种简单方法。

计算机领域常见的校验和的方法有循环冗余校验(CRC)、MD5、SHA 家族等。

产生校验和的实际过程一般是向校验函数或校验和算法输入给定的数据,一个良好的校验和算法通常会对进行很小的修改的输入数据都会输出一个显著不同的值。

一般现在比较常用的是 SHA 家族校验。

Linux 下的 Checksum 命令

通常发行版的 Linux 版本都自带了 Checksum 的命令工具,不同发行版命令可能不同。大部分 Linux 版本都包含了 sha1sum 命令工具。

使用非常简单如下:

$sha1sum {filename} 该命令会输出Checksum的散列值及文件名

windows 下的 Checksum 命令

windows 默认是没有自带 Checksum 命令工具的,如果要实现类似 Linux 里的 sha1sum 命令结果该怎么办?

微软还是很厚的地,免费提供了插件供大家下载使用,这个插件名字叫 The File Checksum Integrity Verifier (FCIV),就是一个 fciv.exe 文件。

下面是下载地址:

link to fciv.exe download page!

windows 下 Java 编程将文件 Checksum 值写入 EOJ 文件

实际就是在 Java 程序里调用 fciv.exe 命令,计算出文件的散列值,再将其追加到 EOJ 文件末尾。使用了 apache common 包里的 exec 类库。

以下是简单示例代码:

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;

import org.apache.commons.exec.CommandLine;

import org.apache.commons.exec.DefaultExecutor;

import org.apache.commons.exec.PumpStreamHandler;

/**** The checksum class implements below functions:* read the EOJ file for each record* call the fciv.exe command capture the checksum value* and write into the EOJ file** @author lee**/

public class CheckSumClass {

/*** @param args*/

public static void main(String[] args) {

//EOJ file full name including the file pathString eojFile = args[0];

//fciv.exe file pathString cksumFile = args[1];

//flat file pathString flatfilePath = args[2];

if(null==eojFile||null==cksumFile||null==flatfilePath

||"".equals(eojFile)||"".equals(cksumFile)

||"".equals(flatfilePath)){

System.err.println("The error parameters!");

System.exit(-1);

}

FileInputStream fi = null;

PrintWriter pw = null;

File file = null;

Scanner in = null;

List cksumList = new ArrayList();

try{

fi = new FileInputStream(eojFile);

file = new File(eojFile);

in = new Scanner(fi);

String currentLine = null;

while(in.hasNextLine()){

currentLine = in.nextLine();

if(currentLine!=null&&!"".equals(currentLine.trim())){

String[] tokens = currentLine.split("~");

String fileName = tokens[0];

//execute fciv.exe command and capture result value put into the cksumListByteArrayOutputStream outputStream = new ByteArrayOutputStream();

String command = cksumFile+" -wp -sha1 "+flatfilePath+"\\"+fileName;

CommandLine commandline = CommandLine.parse(command);

DefaultExecutor exec = new DefaultExecutor();

PumpStreamHandler streamHandler = new PumpStreamHandler(outputStream);

exec.setStreamHandler(streamHandler);

exec.execute(commandline);

String output = outputStream.toString();

String outstrs[] = output.split("\r\n");

String shavalue = outstrs[3].split(" ")[0];

cksumList.add(currentLine+"~"+shavalue);

}

}

//write the checksum value into EOJ filepw = new PrintWriter(file);

for(int j=0;j

pw.println(cksumList.get(j));

}

pw.flush();

}catch(Exception ex){

ex.printStackTrace();

}finally{

if(fi!=null)

try {

fi.close();

} catch (IOException e) {

// TODO Auto-generated catch blocke.printStackTrace();

}

if(pw!=null) pw.close();

if(in!=null) in.close();

if(file!=null) file = null;

}

}

}

checksum命令 linux_数字签名及 Checksum 校验和相关推荐

  1. checksum命令 linux_关于Linux操作系统的一些命令是什么?

    展开全部 我也是学黑客e68a84e8a2ad62616964757a686964616f31333332626666的..不过只是业余黑客.楼主有兴趣的话可以来我们论坛或者YY一起学习研究..简单地 ...

  2. checksum命令 linux_linux命令详解:md5sum命令

    作为一个运维工作者,日常肯定会频繁的更新,怎样区分每次的更新 更清楚的区别两次更新的文件的不同呢 推荐一个比较实用的方法,即获取每次更新文件的md5值. 前言在网络传输.设备之间转存.复制大文件等时, ...

  3. checksum命令 linux_Linux下命令故障集结

    一. 文件和目录类 File exist 文件已经存在 No such file or directory 没有这个文件或目录(这个东西不存在) command not found 命令找不到(没有这 ...

  4. checksum命令 linux,Windows相当于linux cksum命令

    I am looking for a way to compute crc checksum cross platform. cksum works on Linux, AIX, HP-UX Itan ...

  5. [转] openssl dgst命令完成SHA256哈希校验和RSA数字签名

    http://www.cnblogs.com/gordon0918/p/5382541.html 博主: 拾荒人 openssl 摘要和签名验证指令dgst使用详解

  6. java checksum 校检和,java checksum

    checksum>false java ** * 不同的类型,其属性定义有所有同,最好是加载 xml 文件的方式来配置 */ public ...... Software Engineer, T ...

  7. gpg加密命令 linux_用 PGP 保护代码完整性(五):将子密钥移到一个硬件设备中 | Linux 中国...

    在这个系列教程中,将为你提供使用 PGP 和保护你的私钥的最佳体验.-- Konstantin Ryabitsev致谢译自 | linux.com 作者 | Konstantin Ryabitsev译 ...

  8. gpg加密命令 linux_加密方案 GNUPG amp; Yubikey

    随着时间流逝,我生活中出现的设备越来越多,密码也越来越多,因为记忆成本很多密码强度都不够高,不安全,所以迫切需要一款密码学加密工具来真正解放主动记忆密码,能够将密码存储在一个文件中并且保证这个文件绝对 ...

  9. gpg加密命令 linux_用 PGP 保护代码完整性(四):将主密钥移到离线存储中 | Linux 中国...

    如果开发者的 PGP 密钥被偷了,危害非常大.了解一下如何更安全.-- Konstantin Ryabitsev有用的原文链接请访问文末的"原文链接"获得可点击的文内链接.全尺寸原 ...

最新文章

  1. html base64 本地图片,base64 html 图片
  2. python爬虫招聘-Python爬虫实战之(二)| 寻找你的招聘信息
  3. 文巾解题 876. 链表的中间结点
  4. 反思找开瓶器的过程:预判选择方法的执行结果 充分主动积极的沟通
  5. 实现strlen()(c语言)
  6. Lombok–您绝对应该尝试一下
  7. asp还有人用吗_中药都安全吗?服用这些中药需要注意
  8. 45 FI配置-财务会计-固定资产-一般评估-指定折旧条件转移
  9. 【POJ1177】【HDU1828】【codevs2149】矩形面积周长并
  10. 【codevs1830】【BZOJ1951】古代猪文,数论综合
  11. 如何通过MongoDB自带的Explain功能提高检索性能?
  12. 204. Count Primes 1
  13. 为什么 MySQL 不推荐使用 join?
  14. python tornado返回上一页 读取refer
  15. 产品读书.心理学《九型人格》
  16. PHP 操作MongoDB
  17. [Hadoop in China 2011] 蒋建平:探秘基于Hadoop的华为共有云
  18. spring事务的传播行为的讲解(笔记 侵删)
  19. [数值计算-17]:最小二乘法的求解2 - 二元二次线性方程组求解
  20. Jquery遍历对象

热门文章

  1. MySQL数据库调优————表结构设计优化
  2. 高等数学:第二章 导数与微分(6)函数的微分
  3. java静态方法和实例方法
  4. 1037U无盘服务器,1037u硬盘录像机主板 NAS/NVR/IP-SAN 12*SATA 多盘位存储 存储服务器主板...
  5. 搞编程,你必知必会的复杂度分析
  6. 什么是“堆”,栈,堆栈,队列,它们的区别
  7. 红白机 编译6502汇编生成NES文件的通用Makefile
  8. Ext.tab.Panel 选项卡
  9. 树莓派linux优酷软件,树莓派安装OSMC打造家庭影院,还能够看优酷和CCTV
  10. 空间参考系统:方位角(azimuth)/仰角(elevation)