Следующий код - это код 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;
}
Я не могу выйти из этой проблемы три дня. Пожалуйста, помогите мне.