📄 rmisignserver.java
字号:
import java.io.*;
import java.security.*;
import java.rmi.*;
import java.rmi.server.*;
public class RMISignServer extends UnicastRemoteObject implements RMISignInterface
{
RMISignObject rmiso = null; //定义RMI签名对象
String rmiServerName = null; //定义服务器名称
String putstr = null;
public RMISignServer(String rmiServerName) throws RemoteException
{
/* RMISignServer的构造器 */
super();
this.rmiServerName = rmiServerName;
}
public RMISignServer(RMISignObject rmiso) throws RemoteException
{
/* RMISignServer的构造器(多态形式) */
super();
this.rmiso = rmiso;
}
public String putString(String putstr) throws RemoteException
{
/* 重载putString()方法(函数) */
this.putstr = putstr;
return putstr;
}
public RMISignObject getSignObj() throws RemoteException
{
/* 重载getSignObj()方法(函数) */
return rmiso; //返回一个RMI签名对象
}
public static void main(String[] args)
{
KeyPairGenerator kpg = null; //定义生成密钥对对象
KeyPair pk = null; //定义密钥持有者对象
Signature signature = null; //定义数字签名算法对象
PublicKey puk = null; //定义公钥对象
PrivateKey pik = null; //定义私钥对象
FileInputStream fileis = null; //定义文件输入流
RMISignObject rmiso = null; //定义RMI签名的实例对象
RMISignServer rmiss = null; //定义RMI Server实例对象
String RemoteSerHost = null;
String FilePathName = null;
byte[] fileTxt;
try
{
RemoteSerHost = "//127.0.0.1/SignServer";
FilePathName = "e:\\writeb~1\\book\\chapter6\\RMISIG~1\\RMISignature";
/* 初始化加密机制和密钥对,并且生成公钥/密钥 */
System.out.print("\n服务器开始启动,并且开始生成密钥对...");
kpg = KeyPairGenerator.getInstance("DSA");
kpg.initialize(512);
pk = kpg.generateKeyPair();
signature = Signature.getInstance("SHA/DSA");
puk = pk.getPublic();
pik = pk.getPrivate();
signature.initSign(pik);
/* 对正文内容进行序列化,并且实现数字签名 */
System.out.print("...生成密钥完毕!\n\n开始进行正文序列化和RMI数字签名...");
fileis = new FileInputStream(FilePathName);
fileTxt = new byte[fileis.available()];
fileis.read(fileTxt);
signature.update(fileTxt);
/* 进行安全注册和Remote Server绑定 */
System.out.print("...RMI签名完成\n\n...注册安全管理器,并且开始绑定Remote Server...");
System.setSecurityManager(new RMISecurityManager());
rmiso = new RMISignObject(fileTxt,signature.sign(),puk);
rmiss = new RMISignServer(rmiso);
Naming.rebind(RemoteSerHost,rmiss);
System.out.print("...Remote Server已经被成功绑定\n");
System.out.println("\n生成公钥为:" + puk);
System.out.println("\n生成私钥为:" + pik);
System.out.println("\n经过RMI数字签名后的公钥:" + rmiso.puk);
}
catch(Exception e)
{
System.out.println("! Remote Server在启动时抛出例外:" + e.toString());
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -