📄 digsign.java
字号:
package SimpleRSA;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class DigSign
{
int[] Load_key(String args)
{
String keyfile = Input_Output.Input_Key(args);
int[] key = new int[2];
int i;
i = keyfile.indexOf('p');
key[0] = Integer.parseInt(keyfile.substring(9, i-2));
i = keyfile.lastIndexOf(':');
key[1] = Integer.parseInt(keyfile.substring(i+2,keyfile.length()));
return key;
}
void Sign(String args1,String args2,String args3) throws NoSuchAlgorithmException
{
//input plaintext & generate MD
byte plain[] = Input_Output.Input_PlainForSign(args1);
String digest = "";
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(plain);
plain= md.digest();
for(int i=0;i<plain.length;i++)
{
digest += Integer.toHexString((int)plain[i]+128).toUpperCase();
}
System.out.println("The message digest is: " + digest);
//load keys
int key[] = new int[2];
key = Load_key(args3);
//sign MD
BigInteger subplain[] = new BigInteger[plain.length];
String digest_enc = "";
for (int i=0;i<subplain.length;i++)
{
subplain[i] = BigInteger.valueOf(plain[i]+128);
subplain[i] = subplain[i].pow(key[1]);
subplain[i] = subplain[i].mod(BigInteger.valueOf(key[0]));
if(subplain[i].intValue()>99)
digest_enc += subplain[i];
else if(subplain[i].intValue()>9)
digest_enc = digest_enc + "0" + subplain[i];
else
digest_enc = digest_enc + "00" + subplain[i];
}
//generate signature
Input_Output.Output_Cipher(args2, digest_enc);
}
void Verify(String args1,String args2,String args3) throws NoSuchAlgorithmException
{
//input file to generate MD for verify of args1
byte plain[] = Input_Output.Input_PlainForSign(args1);
String digest = "";
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(plain);
plain= md.digest();
for(int i=0;i<plain.length;i++)
{
digest += Integer.toHexString((int)plain[i]+128).toUpperCase();
}
//Load keys
int key[] = new int[2];
key = Load_key(args3);
//input and decrypt signature of args2
String digest_dec = "";
String s = Input_Output.Input_Key(args2);
int sign[] = new int[s.length()/3];
for(int i=0;i<sign.length;i++)
{
sign[i] = Integer.parseInt(s.substring(i*3,(i+1)*3));
}
BigInteger subsign[] = new BigInteger[sign.length];
for (int i=0;i<subsign.length;i++)
{
subsign[i] = BigInteger.valueOf(sign[i]);
subsign[i] = subsign[i].pow(key[1]);
subsign[i] = subsign[i].mod(BigInteger.valueOf(key[0]));
sign[i] = (subsign[i].intValue());
digest_dec += Integer.toHexString((int)sign[i]).toUpperCase();
}
//verify and dispaly result
System.out.println(digest_dec);
if(digest.equalsIgnoreCase(digest_dec))
System.out.println("The file has not been modified.");
else
System.out.println("The file has been MODIFIED!!!");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -