Java中的加密和DSA数字签名

网络安全的加密算法:RSA与DSA比较 RSA(Rivest-Shamir-Adleman)算法是一种公钥加密算法,由美国三位计算机科学家Rivest、Shamir和Adleman于1978年提出。 阅读详情
Java中的加密和DSA数字签名

 Bromon

 一、单向加密(MD5和SHA-1)

 单向加密通常用于消息摘要,具体算法可以阅读java.security.*的源代码获得。经过封装之后可以使用简单的静态方法来实现,Look:

 package org.bromon;
 public class MD5Encoder
 {
 public static void main(String args[])
 {
  String info=args[0];
  try
  {
   //选择MD5加密算法
   java.security.MessageDigest alg=
 java.security.MessageDigest.getInstance("MD5");

   //选择SHA-1加密算法
   //java.security.MessageDigest alg=
 java.security.MessageDigest.getInstance("SHA-1");

   alg.update(info.getBytes());
   byte[] digesta=alg.digest();
   String result="";
   for(int i=0;i<digesta.length;i++)
   {
    int m=digesta[i];
    if(m<0)
    {
     m+=256;//如果是负数就取模
    }

    result=result+Integer.toString(m,16).toUpperCase()+"";//转换为大写字符
   }
   System.out.println(result);
  }catch(Exception e)
  {
   System.out.println(e);
  }
 }
 }
  

 编译:javac –d . MD5Encoder.java
 运行:java org.bromon.MD5Encoder someData

 DES作为单钥加密的代表,目前好象仍然处于五角大楼出口限制的列表中!?

 二、非对称加密DSA数字签名

 通过使用密钥对来实现。根据非对称加密的原理,分发公钥并用其加密,私钥保密,用于解密。而DSA的数字签名则是利用私钥加密,公钥解密,用以保证不可否认性和完整性。以DSA数字签名为例:

 首先需要生成一对密钥:

 package org.bromon;
 import java.io.*;
 import java.security.*;

 public class DSAGenerateKeyPair
 {
 public static void main(String args[])
 {
  try
  {
   java.security.KeyPairGenerator keygen=
 java.security.KeyPairGenerator.getInstance("DSA");

   SecureRandom sr=new SecureRandom();
   sr.setSeed("123".getBytes());//密钥种子
   keygen.initialize(512,sr);
   
   KeyPair keys=keygen.generateKeyPair();
   PublicKey pubkey=keys.getPublic();
   PrivateKey prikey=keys.getPrivate();

   //将生成的密钥对序列化到文件
   ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("prikey.dat"));
   out.writeObject(prikey);
   out.close();
   
   out=new ObjectOutputStream(new FileOutputStream("pubkey.dat"));
   out.writeObject(pubkey);
   out.close();
  }catch(Exception e)
  {
   System.out.println(e);
  }
  
 }
 }

 运行之后会在当前目录生成两个.dat文件。

 然后可以使用私钥对数据签名:

 package org.bromon;
 import java.io.*;
 import java.security.*;

 public class DSASigner
 {
 public static void main(String args[])
 {
  String s="需要加密的内容";
  try
  {
   //导入私钥
   ObjectInputStream in=new ObjectInputStream(new FileInputStream("prikey.dat"));
   PrivateKey prikey=(PrivateKey)in.readObject();
   in.close();
   
   //对数据签名
   Signature signature=Signature.getInstance("DSA");
   signature.initSign(prikey);
   signature.update(s.getBytes());
   byte[] signed=signature.sign();
   
   //将签名后的数据写入文件
   ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("info.dat"));
   out.writeObject(s);
   out.writeObject(signed);
   out.close();
  }catch(Exception e)
  {
   System.out.println(e);
  }
  
 }

 }

 运行之后在当前路径产生一个加密后的文件,将此文件和公钥一起分发给接收者。

 下面是使用公钥验证签名是否正常:

 package org.bromon;
 import java.security.*;
 import java.io.*;

 public class DSAChecker
 {
 public static void main(String args[])
 {
  try
  {
   //导入公钥
   ObjectInputStream in=new ObjectInputStream(new FileInputStream("pubkey.dat"));
   PublicKey pubkey=(PublicKey)in.readObject();
   in.close();
   
   //导入需要读取的文件
   in=new ObjectInputStream(new FileInputStream("info.dat"));
   String s=(String)in.readObject();
   byte[] signed=(byte[])in.readObject();
   in.close();
   
   //验证密钥对
   Signature signCheck=Signature.getInstance("DSA");
   signCheck.initVerify(pubkey);
   signCheck.update(s.getBytes());
   if(signCheck.verify(signed))
   {
    System.out.println(s);
   }else{
    System.out.println("无阅读权限");
   }
  }catch(Exception e)
  {
   System.out.println(e);
  }
  
 }

 }

 运行之后如果密钥匹配无误,会显示加密的内容。如果公钥格式被破坏,会抛出异常。

 Java有非常庞大的加密框架,各种加密和签名种类极多,OReilly - Java Cryptography中有详细介绍。不过一些包在中国无法得到。

Java非对称加密与数字签名实战:RSA、DSA原理与应用详解 加密算法是现代信息安全的核心基础,其原理基于数学难题,旨在实现数据的机密性、完整性与身份验证。非对称加密技术,如RSA,通过公钥与私钥的配对,解决了对称加密中密钥分发的核心难题,为安全通信提供了理论基石。在工程实践中,该技术被广泛应用于HTTPS协议、数字证书、区块链及SSH登录等关键场景,确保了数据传输的可信与安全。本文聚焦于Java平台,深入剖析RSA算法的数学原理与密钥生成机制,并详解其在数字签名(如SHA256withRSA)中的标准实现。通过结合AES等对称加密算法,文章进一步阐述了如何在实际项目 阅读详情

相关推荐

一文读懂,WMS仓库管理系统模块功能

对于仓库管理人员来说,仓储管理是一件需要十分负责、又精细化的工作。

深蓝易网的博客 5216

数据安全算法学习——DSA算法(DSS)

本文主要介绍DSA算法,也可称为DSS算法的计算过程,以及是如何验证的。

weixin_43305350的博客 7175

【Cadence】Virtuoso@LayoutXL 差分电路版图同步修改

对于差分电路,器件和部分走线通常是对称的,只需要画一半,另一半通过镜像操作完成。因此,需要对差分电路进行同步的修改,保证电路的差分对称性和正确的连接关系。然而,通常版图会经过多次修改,修改的部分可能在镜像的时候被遗漏。左边画了金属块,右边也出现了同步出现了金属块。进入group会有同步复制的提示。

乾巽的博客 3046

加解密篇 - 非对称加密算法 (RSA、DSA、ECC、DH)

假设 A 交给 B 一个公钥,并使 B 相信这是A 的公钥,并且 C 可以截下 A 和 B 之间的信息传递,那么 C 可以将自己的公钥传给 B,B 以为这是 A 的公钥。这样,在互通了本地密钥 (SecretKey) 算法后,甲乙双方公开自己的公钥,使用对方的公钥和刚才产生的私钥加密数据,同时可以使用对方的公钥和自己的私钥对数据解密。信息的接收者先用 CA给的公钥解出信息所有者的公钥,这样可以保证信息所有者的公钥是真正的公钥,然后就能通过该公钥证明数字签名是否真实了。如果用公钥,那每个人都可以伪造签名了。

ss810540895的博客 6083

多标签分类怎么做?(Python)

首先简单介绍下,多标签分类与多分类、多任务学习的关系: 多分类学习(Multi-class):分类器去划分的类别是多个的,但对于每一个样本只能有一个类别,类别间是互斥的。例如:分类器判断这只动物是猫、狗、猪,每个样本只能有一种类别,就是一个三分类任务。常用的做法是OVR、softmax多分类

y1282037271的博客 1358

在Ubuntu 20.04上,用EtherCAT Igh 1.6.2驱动高创BD3E伺服电机(附完整C代码)

本文详细介绍了在Ubuntu 20.04实时内核环境下,使用EtherCAT Igh 1.6.2主站驱动高创BD3E伺服电机的完整实现方案。从实时系统配置、伺服电机PDO映射到精确控制线程设计,提供了完整的C代码样例和实际项目中的调试技巧,帮助开发者实现工业自动化中的高精度运动控制。

weixin_30772105的博客 110

非对称加密算法——DSA加密算法

非对称加密算法——DSA加密算法详解

专注分享技术、实用优质教程、资源 2072

给汽车芯片做‘体检’:手把手教你用IEC62380和SN29500估算功能安全失效率

本文详细介绍了如何使用IEC62380和SN29500标准估算汽车芯片的功能安全失效率,涵盖基础认知、方法论对比及实战计算。通过具体案例演示两种标准的应用流程,帮助工程师准确评估半导体器件的可靠性,确保符合ISO 26262标准要求。

weixin_28725553的博客 457

DSA算法解密非对称加密的奥秘

非对称加密算法是一种使用不同的密钥进行加密和解密的加密算法。它使用了一对密钥,分别称为公钥和私钥。公钥可以公开给任何人使用,而私钥则只能由密钥的所有者持有和使用。DSA(Digital Signature Algorithm)是一种用于数字签名的非对称加密算法。它由美国国家标准与技术研究院(NIST)于1994年提出,是一种基于离散对数问题的算法。

博客 749

OpenCV实例(八)车牌字符识别技术(三)汉字识别

相较于数字和英文字符的识别,汽车牌照中的汉字字符识别的难度更大,主要原因有以下4个方面:(1)字符笔画因切分误差导致非笔画或笔画流失。(2)汽车牌照被污染导致字符上出现污垢。(3)采集所得车辆图像分辨率低导致多笔画的汉字较难分辨。(4)车辆图像采集时所受光照影响的差异导致笔画较淡。综合汉字识别时的这些难点来看,很难被直接提取的是字符的局部特征。笔画作为最重要的特征而仅存在于汉字中,这由先验知识可知。一旦捺、横、竖、撇这些笔画特征被提取到,对于汉字字符识别的工作就完成了许多。

小幽余生不加糖 1649

飞行机械臂设计

其后对飞行机械臂系统的机 理模型和基于 ADAMS 的物理模型进行了控制系统的搭建,对于机理模 型,设计了三个输入通道,分别是俯仰力矩,翻滚力矩与偏航力矩,控 制量为翻滚角,俯仰角,偏航角。四旋翼无人机自身具有独特的优势,在无人机上增加机械臂,整个 机体系统相当于一架空中行动自如的空中机器人,可以适应更多的应用场合,能够实现空中抓取,运输载荷,巡航监视等任务。的函数模块如图 4-8 所示,可见输入为 U1,U2,U3,U4,分别对应总力矩,俯仰力矩,翻滚力矩,偏航力矩,控制 量为俯仰角,翻滚角,偏航角。

coldmood77的博客 2914

java dsa加密实例,Java中的加密和DSA数字签名 | 学步园

Bromon一、单向加密(MD5和SHA-1)单向加密通常用于消息摘要,具体packageorg.bromon;publicclassMD5Encoder{publicstaticvoidmain(Stringargs[]){Stringinfo=args[0];try{//选择MD5加密算法java.security.MessageDigestalg=java.security...

weixin_35969301的博客 300

RK3568下GPIO模拟串口

在嵌入式开发中,硬件 UART 资源可能被其他外设占用。此时,通过 GPIO 模拟 UART(软串口)成为一种灵活的解决方案。本文基于 RK3568 平台,结合 Linux 内核模块,实现高精度软串口通信,并深入分析关键技术细节。可以看到已经接收到数据了,可以自己创建自定义的设备文件到/dev下,也可以按照串口设备的标准创建一个设备,后面有时间我写一篇和标准串口设备结合的gpio模拟串口文章。RK3568 GPIO 模拟串口(软串口)实现详解。将编译好的驱动放到板子上运行。再写个Makefile。

文石_2009的博客 363

Java加密技术(六)——数字签名算法DSA

接下来我们介绍DSA数字签名,非对称加密的另一种实现。 [b]DSA[/b] DSA-Digital Signature Algorithm 是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。简单的说,这是一种更高级的验证方式,用作数字签名。不单单只有公钥、私钥,还有数字签名。私钥加密生成数字签名,公钥验证数...

snowolf_37的专栏 289

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java加密算法 DSA 和 数字签名

package com.stone.security; import java.security.Key; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import jav

打渔还是晒网 —— stone 6821

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【密钥算法】Java加密技术(六)---DSA 数字签名算法

接下来我们介绍DSA数字签名,非对称加密的另一种实现。  DSA  DSA-Digital Signature Algorithm 是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。简单的说,这是一种更高级的验证方式,用作数字签名。不单单只有公钥、私钥,还有数字签名。私钥加密生成数字签名,公钥验证数据及签名。如果数据

lcczzu的专栏 769

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Java加密技术(六)——数字签名算法DSA(转载)

接下来我们介绍DSA数字签名,非对称加密的另一种实现。 DSA DSA-Digital Signature Algorithm 是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。简单的说,这是一种更高级的验证方式,用作数字签名。不单单只有公钥、私钥,还有数字签名。私钥加密生成数字签名,公钥验证数据及签 名。如果数据和签...

wb284551926的博客 195

24、Java加密技术(六)——数字签名算法DSA

http://snowolf.iteye.com/blog/382749 [color=green]DSA [/color] DSA-Digital Signature Algorithm 是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。简单的说,这是一种更高级的验证方式,用作数字签名。不单只有公钥、私钥,还有数字...

onway417 317
上一篇: weblogic 8.1下数据库连接池的配置
下一篇: java操作Excel的一种方法
bromon
博客等级 码龄25年 61粉丝 81原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值