`

java消息签名

    博客分类:
  • java
阅读更多
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
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.SecureRandom;
import java.security.Signature;

public class SinatureTest {

private static final int KEYSIZE=512;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
    
try
{
if(args[0].equals("-genkey"))
{
KeyPairGenerator pairgen=KeyPairGenerator.getInstance("DSA");
SecureRandom random=new SecureRandom();
pairgen.initialize(KEYSIZE, random);
KeyPair keyPair=pairgen.generateKeyPair();
ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream(args[1]));
out.writeObject(keyPair.getPublic());
out.close();
out=new ObjectOutputStream(new FileOutputStream(args[2]));
out.writeObject(keyPair.getPrivate());
out.close();
}else if(args[0].equals("-sign"))
{
ObjectInputStream keyIn=new ObjectInputStream(new FileInputStream(args[3]));
PrivateKey privkey=(PrivateKey) keyIn.readObject();
keyIn.close();

Signature signalg=Signature.getInstance("DSA");
signalg.initSign(privkey);
File infile=new File(args[1]);
InputStream in=new FileInputStream(infile);
int length=(int) infile.length();
byte[] message=new byte[length];
in.read(message,0,length);
in.close();

signalg.update(message);
byte[] signature=signalg.sign();

DataOutputStream out=new DataOutputStream(new FileOutputStream(args[2]));
int signlength=signature.length;
out.writeInt(signlength);
out.write(signature,0,signlength);
out.write(message,0,length);
out.close();
}else if(args[0].equals("-verify"))
{
ObjectInputStream keyIn=new ObjectInputStream(new FileInputStream(args[2]));
PublicKey pubkey=(PublicKey) keyIn.readObject();
keyIn.close();

Signature verifyalg=Signature.getInstance("DSA");
verifyalg.initVerify(pubkey);

File infile=new File(args[1]);
DataInputStream in=new DataInputStream(new FileInputStream(infile));
int signlength=in.readInt();
byte[] signature=new byte[signlength];
in.read(signature,0,signlength);

int length=(int) (infile.length()-signlength-4);
byte[] message=new byte[length];
in.read(message,0,length);
in.close();

verifyalg.update(message);
if(!verifyalg.verify(signature))
{
System.out.println("not ");
}
System.out.println("verifid");
}
}catch(Exception e)
{
e.printStackTrace();
}
}

}


消息签名
1)javac *.java
2)java SignatureTest -genkey public.key private.key
3)java SignatureTest -sign sample.txt.signed private.key
4)java SignatureTest -verify sample.txt.signed public.key
分享到:
评论

相关推荐

    JAVA数字签名程序

    JAVA数字签名JAVA数字签名JAVA数字签名JAVA数字签名JAVA数字签名JAVA数字签名JAVA数字签名JAVA数字签名JAVA数字签名JAVA数字签名JAVA数字签名JAVA数字签名JAVA数字签名JAVA数字签名JAVA数字签名JAVA数字签名JAVA数字...

    java 数字签名验签

    Java 数字签名是一种用于验证数据完整性和发送者身份的安全机制,它是基于公钥加密技术的。在Java中,数字签名通常使用Java Cryptography Architecture (JCA) 和 Java Cryptography Extension (JCE) 提供的API来实现...

    用Java数字签名提供XML安全.doc

    【Java数字签名提供XML安全】 XML(eXtensible Markup Language)作为一种标准的数据交换格式,在软件开发和数据传输中扮演着重要角色。然而,随着XML的广泛应用,数据的安全性问题日益凸显。为了确保XML文件的完整...

    java数字签名源程序

    Java数字签名源程序是用于实现数据完整性、身份验证和非否认性的关键技术,它在网络安全中扮演着重要角色。本程序是使用JAVA编程语言编写的,遵循了计算机科学中关于密码学的基本原理。数字签名通常与公钥基础设施...

    一个java程序的艺术签名程序

    别人那边考过来的 一款java艺术签名jar包

    开心超级签系统源码 Java超级签名系统apk分发系统源码

    【标题】"开心超级签系统源码 Java超级签名系统apk分发系统源码"涉及到的主要知识点是Android应用的签名机制、Java编程以及应用分发。 首先,我们需要理解Android应用的签名机制。在Android系统中,每个应用在安装...

    开心超级签名系统源码下载 Java超级签名系统企业签名超级签名 apk分发系统源码.zip

    开心的java超级签名系统,别人发的我也不知道那个版本了,这个java版当是别人1W多买的,java的不会搞就没搭建了,所以你也别来问我怎么搭建和演示了,截图是源码里的模板图,源码里附带部署说明。有需要的自行下载。...

    java简单实现验证签名.zip

    在Java编程环境中,签名验证是安全领域中的一个重要概念,它涉及到数据完整性和来源验证。这里的"java简单实现验证签名"项目可能是指通过Java语言来实现一个简单的数字签名验证过程。数字签名通常用于确保数据未被...

    java生成及验证android签名文件源码及生成签名文件

    签名过程涉及到了Java的关键组件——Java Key Store(JKS),这是Java提供的一个安全存储密钥和证书的容器。 生成Android签名文件通常使用Java的`keytool`命令行工具,它包含在Java Development Kit (JDK) 中。以下...

    Java 数字签名和验证

    当发送者对消息或文件进行签名时,他们会使用私钥对消息的哈希值进行加密,接收者则使用发送者的公钥来解密这个签名,以验证消息是否被篡改以及发送者的身份。 1. RSA(Rivest-Shamir-Adleman)签名: RSA是一种...

    java数字签名

    同时,接收者可以通过验证签名来确认消息确实来自声称的发送者,防止中间人攻击。 Java提供了一套强大的安全框架,其中包括`java.security`包,这个包下有`Signature`类,它是实现数字签名的核心。使用`Signature`...

    java写的数字签名

    Java编写的数字签名程序是信息安全领域的一个重要应用,它涉及到密码学、数据完整性以及身份验证等多个方面的知识。在这个程序中,我们主要会讨论以下几个关键概念和技术: 1. **数字签名**:数字签名并非我们日常...

    java JAR包签名

    Java JAR(Java Archive)包签名是一个安全机制,用于验证JAR文件的来源和完整性,确保用户在执行或安装时可以信任这些文件。签名过程包括对JAR中的每个文件进行哈希计算,然后将这些哈希值与发布者的数字签名一起...

    Java+电子签名,生成PDF格式的合同

    Java电子签名技术是一种在PDF文档中实现安全、可验证签署的方法,它结合了现代加密技术和数字证书,确保了文档的完整性和不可篡改性。在本文中,我们将深入探讨如何利用Java来生成带有电子签名的PDF格式合同。 首先...

    java实现pdf文件电子签名

    在Java环境中实现PDF文件的电子签名,主要涉及到数字证书的生成、PDF处理库的使用以及签名的嵌入操作。下面将详细介绍这个过程。 首先,我们需要了解PFX(Personal Information Exchange)证书。PFX是一种包含了...

    java数字签名(可用)

    Java 数字签名是一种用于验证数据完整性和发送者身份的安全机制,它是基于公钥加密技术的。在Java中,数字签名通常涉及到使用Java的KeyStore API来管理密钥对,包括私钥和公钥。KeyStore是Java提供的一个安全组件,...

    java数字签名的讲解

    Java 数字签名是一种用于验证数据完整性和发送者身份的安全机制,它是基于公钥加密技术的。在 Java 平台上,我们可以使用内置的 Keytool 和 Jarsigner 工具来实现数字签名的操作。以下是对这个主题的详细讲解: 一...

    Java 签名加密 + c#签名加密

    "Java 签名加密 + C#签名加密"这个主题涉及到的就是如何在Java和C#这两种不同的编程语言之间进行安全的数据交互,确保信息不被篡改。签名加密是一种常见的安全措施,它结合了数字签名和加密技术,用于验证数据的完整...

Global site tag (gtag.js) - Google Analytics