最近做某某银行对接的时候需要用到 RSA 算法加签验签, 这里把用到的工具方法整理下
根据私钥文件路径读取私钥:
public static String getSignPrivateKey4Client(String keyPath){
StringBuffer privateBuffer=new StringBuffer();
try {
//InputStream inputStream = Thread.currentThread().getContextClassLoader()
// .getResourceAsStream(signPrivatePath);
FileInputStream fi=new FileInputStream(keyPath);
InputStreamReader inputReader = new InputStreamReader(fi);
BufferedReader bufferReader = new BufferedReader(inputReader);
// 读取一行
String line = "";
while ((line=bufferReader.readLine())!=null) {
privateBuffer.append(line);
}
} catch (Exception e) {
e.printStackTrace();
}
return privateBuffer.toString();
}
根据公钥文件路径读取公钥:
public static String getVerifyKey4Client(String keyPath){
String key="";
try {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
//InputStream in = Thread.currentThread().getContextClassLoader()
// .getResourceAsStream(signPublicPath);
FileInputStream fi=new FileInputStream(keyPath);
//生成一个证书对象并使用从输入流 inStream 中读取的数据对它进行初始化。
Certificate c = cf.generateCertificate(fi);
PublicKey publicKey = c.getPublicKey();
key=new BASE64Encoder().encodeBuffer(publicKey.getEncoded());
} catch (Exception e) {
e.printStackTrace();
}
return key;
}
json 数据转map
public static Map<String, Object> parseJSON2Map(String jsonStr){
Map<String, Object> map = new HashMap<String, Object>();
//最外层解析
JSONObject json = JSONObject.fromObject(jsonStr);
for(Object k : json.keySet()){
Object v = json.get(k);
//如果内层还是数组的话,继续解析
if(v instanceof JSONArray){
List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
Iterator<JSONObject> it = ((JSONArray)v).iterator();
while(it.hasNext()){
JSONObject json2 = it.next();
list.add(parseJSON2Map(json2.toString()));
}
map.put(k.toString(), list);
} else {
map.put(k.toString(), v);
}
}
return map;
}
未完.................