Как я могу конвертировать Java в C # (сертификация, (RSA, SHA)) - PullRequest
0 голосов
/ 23 октября 2019

Следующий код - это код Java, работающий путем импорта файла JKS (хранилище ключей Java). Я конвертировал JKS в PFX. Также у меня есть Key Alias ​​и KeyPassword.

У меня есть следующий код, и я хочу преобразовать его в C #.

В коде есть засоренная часть, и я не могу идти дальше.

public String setCertCode(String jsonParameter, boolean filterYn){

        String certValue = jsonParameter;

        try{        
            KeyStore keyStore = KeyStore.getInstance("JKS");
            keyStore.load(new FileInputStream(/* jks file location (string) */), /* keyPassword (char array)*/);

            java.security.cert.Certificate cf = keyStore.getCertificate(/* Key Alias (string) */);
            Key k1 = keyStore.getKey(keyAlias, keyPassword.toCharArray()); 
            //I think that get a private key in this part. But C# doesn't know how to do it.
            KeyPair kp1 = new KeyPair(cf.getPublicKey(), (PrivateKey)k1);
            //I don't know how to get k1. Therefore, this code is too. 

            Cipher cipher = Cipher.getInstance("RSA");

            String data = /* some data */;

            Signature sigA = Signature.getInstance("SHA256withRSA"); 
            sigA.initSign(kp1.getPrivate()); 
            sigA.update(data.getBytes());
            byte[] sign = sigA.sign();
            md.update(sign);

            Calendar cal = Calendar.getInstance();
            long sysdate = cal.getTimeInMillis();
            String time = Long.toString(sysdate);

            MessageDigest md = MessageDigest.getInstance("SHA-256");
            byte bs[] = md.digest();
            StringBuffer sb = new StringBuffer();
            for(int i=0;i<bs.length;i++){
                sb.append(Integer.toString((bs[i]&0xff)+ 0x100, 16).substring(1));
            }
            String rtn = sb.toString();

            //
            cipher.init(Cipher.ENCRYPT_MODE, kp1.getPublic());
            byte[] bCipher = cipher.doFinal(time.getBytes());
            String sCipherAscii = toAscii(BinaryCodec.toAsciiString(bCipher)); 


            //json parameter + code + certification value
            certValue = certValue.substring(0, certValue.length()-1) + ",\"certCryp\":\""+rtn+"\",\"time\":\""+sCipherAscii+"\"}";

        }catch(Exception e){
            e.printStackTrace();
        }
        return certValue;
    }

Я не могу выйти из этой проблемы три дня. Пожалуйста, помогите мне.

...