Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package eu.apksoft.android.banka.test.obsolete;
- import java.math.BigInteger;
- import java.security.InvalidKeyException;
- import java.security.KeyFactory;
- import java.security.MessageDigest;
- import java.security.NoSuchAlgorithmException;
- import java.security.PrivateKey;
- import java.security.PublicKey;
- import java.security.Signature;
- import java.security.SignatureException;
- import java.security.spec.InvalidKeySpecException;
- import java.security.spec.RSAPrivateKeySpec;
- import java.security.spec.RSAPublicKeySpec;
- import sun.security.rsa.RSAPrivateKeyImpl;
- import sun.security.rsa.RSAPublicKeyImpl;
- public class Signing {
- public static void main(String[] args) {
- byte data[] = "Hello Brmlab transaction: 000000-2258389083/800;-1000000".getBytes();
- try {
- MessageDigest digest = MessageDigest.getInstance("SHA1");
- digest.reset();
- digest.update(data);
- byte[] hash = digest.digest();
- BigInteger modulus = new BigInteger("b754d4de025691740c07e206d5fd8bf2b1803fa318d81bbbf897ed48356b11ee0e4e31d9eabdda5ba7c061572e083e99961e9a99e6c0b564365180cda41ee6aaa5bdcf4dc46205a2de72150c916473d6bfc75c996410d094612d87a2be31e7a79d33e3e06cda59017193a09d424eca7463de44fd5c60b6a58125e88ef418d015", 16);
- BigInteger pubExponent = new BigInteger("10001", 16);
- BigInteger privExponent = new BigInteger("25ebd22c29e7a6268ee682864f7526a188bdb26c16137d89201eace226ca82e6eee695c131a11bada1c1556127106582775ed533c85b4c29f262617627e08c6d9de91ad92ca2197ce87f9546418b1353c01ed23f0e2d5fdec95b7f57f9476e10d5b6b087e39876b5e24ceb4cd902d7cbd137a59b17b3552c2284d4c5e2aeab01", 16);
- RSAPrivateKeySpec privateKeySpec = new RSAPrivateKeySpec(modulus, privExponent);
- RSAPublicKeySpec publicKeySpec = new RSAPublicKeySpec(modulus, pubExponent);
- KeyFactory keyFactory = KeyFactory.getInstance("RSA");
- PrivateKey privateKey = keyFactory.generatePrivate(privateKeySpec);
- PublicKey publicKey = keyFactory.generatePublic(publicKeySpec);
- System.out.println(privateKey.getClass());
- RSAPrivateKeyImpl pri = (RSAPrivateKeyImpl)privateKey;
- RSAPublicKeyImpl pub = (RSAPublicKeyImpl)publicKey;
- System.out.println("Private key: " + convertToHex(pri.encode()));
- System.out.println("Public key: " + convertToHex(pub.encode()));
- //sign
- Signature signature = Signature.getInstance("SHA1withRSA");
- signature.initSign(privateKey);
- signature.update(hash);
- byte[] signed_result = signature.sign();
- //verify signature
- signature = Signature.getInstance("SHA1withRSA");
- signature.initVerify(publicKey);
- signature.update(hash);
- boolean testResult = signature.verify(signed_result);
- System.out.println("TEST result: "+ testResult);
- } catch (InvalidKeyException e) {
- e.printStackTrace();
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- } catch (SignatureException e) {
- e.printStackTrace();
- } catch (InvalidKeySpecException e) {
- e.printStackTrace();
- }
- }
- private static String convertToHex(byte[] data) {
- StringBuffer buf = new StringBuffer();
- for (int i = 0; i < data.length; ++i) {
- int halfbyte = data[i] >>> 4 & 0xF;
- int two_halfs = 0;
- do {
- if ((0 <= halfbyte) && (halfbyte <= 9))
- buf.append((char) (48 + halfbyte));
- else
- buf.append((char) (97 + (halfbyte - 10)));
- halfbyte = data[i] & 0xF;
- } while (two_halfs++ < 1);
- }
- return buf.toString();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement