/* this program will display number in words
for eg. if you enter 101,it will show "ONE HUNDRED AND ONE"*/
import java.util.*;
public class NumToWords {
String string;
String st1[] = { "", "one", "two", "three", "four", "five", "six", "seven",
"eight", "nine", };
String st2[] = { "hundred", "thousand", "lakh", "crore" };
String st3[] = { "ten", "eleven", "twelve", "thirteen", "fourteen",
"fifteen", "sixteen", "seventeen", "eighteen", "ninteen", };
String st4[] = { "twenty", "thirty", "fourty", "fifty", "sixty", "seventy",
"eighty", "ninety" };
public String convert(int number) {
int n = 1;
int word;
string = "";
while (number != 0) {
switch (n) {
case 1:
word = number % 100;
pass(word);
if (number > 100 && number % 100 != 0) {
show("and ");
//System.out.print("ankit");
}
number /= 100;
break;
case 2:
word = number % 10;
if (word != 0) {
show(" ");
show(st2[0]);
show(" ");
pass(word);
}
number /= 10;
break;
case 3:
word = number % 100;
if (word != 0) {
show(" ");
show(st2[1]);
show(" ");
pass(word);
}
number /= 100;
break;
case 4:
word = number % 100;
if (word != 0) {
show(" ");
show(st2[2]);
show(" ");
pass(word);
}
number /= 100;
break;
case 5:
word = number % 100;
if (word != 0) {
show(" ");
show(st2[3]);
show(" ");
pass(word);
}
number /= 100;
break;
}
n++;
}
return string;
}
public void pass(int number) {
int word, q;
if (number < 10) {
show(st1[number]);
}
if (number > 9 && number < 20) {
show(st3[number - 10]);
}
if (number > 19) {
word = number % 10;
if (word == 0) {
q = number / 10;
show(st4[q - 2]);
} else {
q = number / 10;
show(st1[word]);
show(" ");
show(st4[q - 2]);
}
}
}
public void show(String s) {
String st;
st = string;
string = s;
string += st;
}
public static void main(String[] args) {
NumToWords w = new NumToWords();
Scanner input = new Scanner(System.in);
System.out.print("Enter Number: ");
int num = input.nextInt();
String inwords = w.convert(num);
System.out.println(inwords);
}
}
Я предполагаю, что ваше построение расширенных данных действительно произошло до вашего звонка в CertCreateSelfSignedCertificate
(и, аналогично, ваше построение myBlobdata
произошло до его использования).
Основная проблема заключается в том, что вы использовали одну запись SAN (своего рода) в качестве полного расширения SAN; что означало, что вы потеряли некоторые обертки для кодирования. Еще одна проблема заключается в том, что вы использовали szOID_SUBJECT_ALT_NAME
, который является неправильным OID для альтернативного имени субъекта ... вы на самом деле хотите szOID_SUBJECT_ALT_NAME2
.
Я хочу добавить следующее: DNS-имя = полное доменное имя, DNS-имя = имя хоста и DNS-имя = IP
blockquote>Добавление IP-адреса в качестве DNS-имени не является -стандарт и должен привести к провалу матча. Вы действительно хотите добавить IP-адрес в качестве записи SAN IP-адреса.
CERT_ALT_NAME_ENTRY entries[3]; entries[0] = { CERT_ALT_NAME_DNS_NAME }; entries[0].pwszDNSName = L"example.org"; // IPv4 Address 10.12.1.130 BYTE ip4Bytes[] = { 10, 12, 1, 130 }; entries[1] = { CERT_ALT_NAME_IP_ADDRESS }; entries[1].IPAddress = { sizeof(ip4Bytes), ip4Bytes }; // ::1, big-endian BYTE ip6Bytes[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; entries[2] = { CERT_ALT_NAME_IP_ADDRESS }; entries[2].IPAddress = { sizeof(ip6Bytes), ip6Bytes }; CERT_NAME_BLOB name = { cbEncoded, buf }; BYTE extBuf[1024] = { 0 }; cbEncoded = sizeof(extBuf); CERT_ALT_NAME_INFO info = { sizeof(entries) / sizeof(CERT_ALT_NAME_ENTRY), entries }; if (!CryptEncodeObjectEx( X509_ASN_ENCODING, X509_ALTERNATE_NAME, &info, 0, nullptr, extBuf, &cbEncoded)) { // Whatever your error handling story is. // // Note I didn't do a 0 buffer or CRYPT_ENCODE_ALLOC; I just knew // that my buffer would be big enough. } CERT_EXTENSION extension = { 0 }; extension.fCritical = 0; extension.pszObjId = szOID_SUBJECT_ALT_NAME2; extension.Value = { cbEncoded, extBuf }; CERT_EXTENSIONS extensions = { 1, &extension }; ... PCCERT_CONTEXT cert = CertCreateSelfSignCertificate( 0, &name, 0, &keyProvInfo, &sigAlg, 0, &certExpirationDate, &extensions);
В CertUI, который дает мне значение альтернативного имени субъекта, я ожидаю:
DNS Name=example.org IP Address=10.12.1.130 IP Address=0000:0000:0000:0000:0000:0000:0000:0001