У меня есть набор данных для классификации текста, готовый для использования в MATLAB. Каждый документ является вектором в этом наборе данных, и размерность этого вектора чрезвычайно высока. В этих случаях люди обычно выбирают некоторые функции для векторов, подобных тем, которые вы действительно нашли в инструментарии WEKA. Есть ли что-нибудь подобное в MATLAB? если нет, не могу ли ты предложить и алгоритм для меня, чтобы это сделать ...? s то же самое, что и содержимое DigestValue), но я не могу проверить ...
Я могу успешно выполнить ручную проверку ссылки (канонизировать каждый ссылочный элемент -> SHA1 -> Base64 -> проверить, совпадает ли он с DigestValue), но я не могу проверить SignatureValue. Вот SignedInfo для канонизации и хэш:
<ds:SignedInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></ds:CanonicalizationMethod>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"></ds:SignatureMethod>
<ds:Reference URI="#element-1-1291739860070-11803898">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></ds:DigestMethod>
<ds:DigestValue>d2cIarD4atw3HFADamfO9YTKkKs=</ds:DigestValue>
</ds:Reference>
<ds:Reference URI="#timestamp">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></ds:DigestMethod>
<ds:DigestValue>YR/fZlwJdw+KbyP24UYiyDv8/Dc=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
После удаления всех пробелов между тегами (и, таким образом, получения всего элемента в одной строке), я получаю этот дайджест sha1 (в Base64):
6l26iBH7il / yrCQW6eEfv / VqAVo =
Теперь я ожидаю найти тот же дайджест после расшифровки содержимого SignatureValue, но я получаю другое и более длинное значение:
MCEwCQYFKw4DAhoFAAQU3M24VwKG02yUu6jlEH + u6R4N8I для кода [12] расшифровка:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dbf.newDocumentBuilder();
Document doc = builder.parse(new File(inputFilePath));
NodeList nl = doc.getElementsByTagName("ds:SignatureValue");
if (nl.getLength() == 0) {
throw new Exception("Cannot find SignatureValue element");
}
String signature = "OZg96GMrGh0cEwbpHwv3KDhFtFcnzPxbwp9Xv0pgw8Mr9+NIjRlg/G1OyIZ3SdcOYqqzF4/TVLDi5VclwnjBAFl3SEdkyUbbjXVAGkSsxPQcC4un9UYcecESETlAgV8UrHV3zTrjAWQvDg/YBKveoH90FIhfAthslqeFu3h9U20=";
X509Certificate cert = X509Certificate.getInstance(new FileInputStream(<a file path>));
PublicKey pubkey = cert.getPublicKey();
Cipher cipher = Cipher.getInstance("RSA","SunJCE");
cipher.init(Cipher.DECRYPT_MODE, pubkey);
byte[] decodedSignature = Base64Coder.decode(signature);
cipher.update(decodedSignature);
byte[] sha1 = cipher.doFinal();
System.out.println(Base64Coder.encode(sha1));
Что меня сильно смущает, так это то, что два дайджеста имеют разный размер, но, конечно, мне также нужно получить точно такое же значение из двух вычислений. Какие-либо предложения? Спасибо.