美文网首页
Condensed-RSA

Condensed-RSA

作者: SeanC52111 | 来源:发表于2017-10-26 00:37 被阅读0次

    Condensed-RSA Definition:

    image.png
    package sig;
    import java.security.*;
    import java.security.interfaces.RSAPublicKey;
    import java.security.interfaces.RSAPrivateKey;
    import javax.crypto.Cipher;
    
    import Tool.Hasher;
    
    import java.math.BigInteger;
    import java.security.MessageDigest;
    import java.util.*;
    
    
    public class signature {
        public static int byteArrayToInt(byte[] b) {  
            return   b[3] & 0xFF |  
                    (b[2] & 0xFF) << 8 |  
                    (b[1] & 0xFF) << 16 |  
                    (b[0] & 0xFF) << 24;  
        }
            //change a string to integer using sha1 algorithm
        public static int digest(String s) {
            int result = 0;
            try {
                MessageDigest messageDigest =MessageDigest.getInstance("SHA-1");
                byte[] inputByteArray = s.getBytes("utf-8");
                messageDigest.update(inputByteArray);
                byte[] resultbyte = messageDigest.digest();
                result = byteArrayToInt(resultbyte);
            }catch(Exception e) {}
            return result;
        }
        public static void main(String[] args)throws Exception{
            KeyPairGenerator gen = KeyPairGenerator.getInstance("RSA");
            gen.initialize(512);
            KeyPair keyPair = gen.generateKeyPair();
            PublicKey publickey = keyPair.getPublic();
            PrivateKey privatekey = keyPair.getPrivate();
            
            RSAPublicKey rsaPublicKey = (RSAPublicKey) publickey;
            RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) privatekey;
            BigInteger n = rsaPublicKey.getModulus();
            BigInteger e = rsaPublicKey.getPublicExponent();
            BigInteger d = rsaPrivateKey.getPrivateExponent();
            BigInteger num1 = new BigInteger("3");
            BigInteger mul = num1.modPow(e, n).modPow(d, n);
            System.out.println(mul);
            
            
            String str1 = new String("2ef7bde608ce5404e97d5f042f95f89f1c232871");
            int hashnum1 = digest(str1);
            String str2 = new String("361772a491529e2ddc1740c7a8187bf466faeb41");
            int hashnum2 = digest(str1);
            BigInteger bighashnum1 = new BigInteger(""+hashnum1);
            BigInteger bighashnum2 = new BigInteger(""+hashnum2);
            long start = System.nanoTime();
            BigInteger mulmod = bighashnum1.multiply(bighashnum2).mod(n);
            
            BigInteger sig1 = bighashnum1.modPow(e,n);
            BigInteger sig2 = bighashnum2.modPow(e, n);
            
            
            BigInteger sigmul = sig1.multiply(sig2).mod(n);
            
            BigInteger decryptedsigmul = sigmul.modPow(d, n);
            long end = System.nanoTime();
            System.out.println(decryptedsigmul.equals(mulmod));
            System.out.println((end-start));
            
        }
    }
    

    相关文章

      网友评论

          本文标题:Condensed-RSA

          本文链接:https://www.haomeiwen.com/subject/fuchpxtx.html