private static String getSecurePassword(String passwordToHash, String salt) {
   String generatedPassword = null;
   try {
     // Create MessageDigest instance for MD5
     MessageDigest md = MessageDigest.getInstance("MD5");
     // Add password bytes to digest
     md.update(salt.getBytes());
     // Get the hash's bytes
     byte[] bytes = md.digest(passwordToHash.getBytes());
     // This bytes[] has bytes in decimal format;
     // Convert it to hexadecimal format
     StringBuilder sb = new StringBuilder();
     for (int i = 0; i < bytes.length; i++) {
       sb.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1));
     }
     // Get complete hashed password in hex format
     generatedPassword = sb.toString();
   } catch (NoSuchAlgorithmException e) {
     e.printStackTrace();
   }
   return generatedPassword;
 }
  public String sendDetails(String password, byte[] phash, String transactionID, byte[] spdata)
      throws RemoteException, NotBoundException, NoSuchAlgorithmException, NoSuchPaddingException,
          InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
    Cipher cipher = Cipher.getInstance("RSA");
    cipher.init(Cipher.DECRYPT_MODE, privateKey);
    byte[] cipherData = cipher.doFinal(spdata);
    String x = new String(cipherData);
    String sp[] = new String[10];
    StringTokenizer st = new StringTokenizer(x.toString(), "|");
    int count = 0;
    StringBuilder message = new StringBuilder();
    while (st.hasMoreTokens()) {
      sp[count] = st.nextToken();
      count++;
    }

    String decodemessgae = new String();
    if (securePassword.equals(sp[1]) && serviceProviderId.equals(sp[0].toString().trim())) {
      System.out.println("hellosubba");
      if (transactionID.equals(transactionDetails[0].toString())) {
        int qrData[] = new int[16];

        for (int i = 0; i < password.length(); i++) {
          message.append(password.charAt(i) ^ bioTemplate.charAt(i));
        }
        for (int i = 0; i < message.length(); i++) {
          if (message.charAt(i) == '1') {
            decodemessgae += '0';
          } else decodemessgae += '1';
        }
        int start = 56, end = 63;
        for (int i = 0; i < 16; i++) {
          qrData[i] = Integer.parseInt(decodemessgae.substring(start, end), 2);
          start += 64;
          end += 64;
        }
        RsDecode dec = new RsDecode(16);
        int r = dec.decode(qrData);
        System.out.println("r=" + r);
        System.out.println("qrData=" + java.util.Arrays.toString(qrData));

        int[] MM = new int[qrData.length + 16];
        System.arraycopy(qrData, 0, MM, 0, qrData.length);
        RsEncode enc = new RsEncode(16);
        enc.encode(MM);
        System.out.println("qrData=" + java.util.Arrays.toString(MM));
      }
    } else {
      message.append("unkonw third party user");
    }
    return message.toString();
  }
  public static void main(String args[]) {
    try {
      // ReceiveMessageInterface rmiclient;
      RmiServer server = new RmiServer();
      // rmiclient=(ReceiveMessageInterface)(registry.lookup("rmiclient"));
      // rmiclient.generateKeys(publicKey);
      KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
      keyGen.initialize(1024);
      KeyPair keypair = keyGen.genKeyPair();
      publicKey = keypair.getPublic();
      privateKey = keypair.getPrivate();

      BufferedImage image = ImageIO.read(new File("/home/subba/Desktop/test/iris1.bmp"));

      // write it to byte array in-memory (jpg format)
      ByteArrayOutputStream b = new ByteArrayOutputStream();
      ImageIO.write(image, "bmp", b);

      // do whatever with the array...
      byte[] jpgByteArray = b.toByteArray();

      // convert it to a String with 0s and 1s
      StringBuilder sb = new StringBuilder();
      int i = 0;
      for (byte by : jpgByteArray) {
        i++;
        if (i > 366) break;
        sb.append(Integer.toBinaryString(by & 0xFF));
      }
      sb.append("0000000000000000000000000000000000000000000");
      System.out.println(sb.toString().length());
      System.out.println(sb.toString());
      int token = 170;
      StringBuilder sb1 = new StringBuilder();
      sb1.append(Integer.toBinaryString(token));
      for (int j = 0; j < 102; j++) {
        sb1.append("00000000000000000000");
      }
      System.out.println("Binary is " + sb1.length());
      for (i = 0; i < sb.length(); i++) {
        bioTemplate.append(sb.charAt(i) ^ sb1.charAt(i));
      }

      /*MessageDigest digest = MessageDigest.getInstance("SHA-256");
      byte[] hashvalue=serviceProviderKey.getBytes();
      digest.update(hashvalue);
      Phashdigest=digest.digest();
      */

      securePassword = getSecurePassword(serviceProviderKey, "200");
      System.out.println(securePassword);
    } catch (Exception e) {
      e.printStackTrace();
      System.exit(1);
    }
  }