📄 testdsa.java
字号:
// Updates: 2004.03.23, 2003.06.13
import java.io.*;
import java.security.*;
/**
* Signe un texte puis v閞ifie la signature. Les constantes CHEAT_TEXT et
* CHEAT_SIGNATURE permettent de modifier respectivement le texte et la
* signature (apr鑣 l'op閞ation de signature) afin de s'assurer que toute
* tentative de fraude soit d閠ect閑.
* Note: Le message peut-阾re de longueur quelconque; il n'y a pas besoin de
* faire un hash avant d'appliquer le processus de signature.
*/
public class TestDSA {
final static int KEY_SIZE = 1024; // [512..1024]
final static boolean CHEAT_TEXT = false;
final static boolean CHEAT_SIGNATURE = false;
final static String message = "Transfer $2000 to account S314542.0";
public static void main(String args[]) {
try {
byte[] text = message.getBytes();
System.out.println("\nGenerating a pair of DSA keys...");
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");
keyPairGen.initialize(KEY_SIZE, new SecureRandom());
KeyPair kp = keyPairGen.generateKeyPair();
System.out.println("Signing the text...");
Signature signature = Signature.getInstance("DSA");
signature.initSign(kp.getPrivate());
signature.update(text);
byte[] sig = signature.sign();
if (CHEAT_TEXT) text[0]++;
if (CHEAT_SIGNATURE) sig[4]++; // changing sig[0] produces an exception
System.out.println("\nVerifying the signature...");
signature.initVerify(kp.getPublic());
signature.update(text);
boolean ok = signature.verify(sig);
System.out.println("Signature is " + (ok ? "OK" : "NOT OK") + " !\n");
}
catch (Exception e) {
System.out.println(e);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -