Это утилита, я сделал, что делает все следующие преобразования:
BTCAddress <---> PubHash <---- PublicKey <---- PrivateKey <---> WalletImportFormatPrivateKey.
Он также может генерировать новый Bitcoin адрес, а также Testnet и Namecoin. Это исправит односимвольные опечаток в Bitcoin адресов и закрытых ключей.
Это требует библиотеку BouncyCastle Crypto в http://www.bouncycastle.org/csharp/ (Только скомпилированные сборки прекрасно).
Вам придется скомпилировать его самостоятельно. Я не хочу выглядеть, как троянский мошенник.
Файл: Form1.cs
Код:
с использованием системы;
используя System.Collections.Generic;
используя System.ComponentModel;
используя System.Data;
используя System.Drawing;
используя System.Linq;
используя System.Text;
используя System.Diagnostics;
используя System.Windows.Forms;
используя System.Security.Cryptography;
используя Org.BouncyCastle.Asn1;
используя Org.BouncyCastle.Crypto;
используя Org.BouncyCastle.Crypto.Digests;
используя Org.BouncyCastle.Crypto.Generators;
используя Org.BouncyCastle.Crypto.Parameters;
используя Org.BouncyCastle.Security;
используя Org.BouncyCastle.Math.EC;
Пространство имен BtcAddress {
общественный частичный класс Form1: Form {
общественный Form1 () {
InitializeComponent ();
}
частные байты [] Base58ToByteArray (строка base58) {
Org.BouncyCastle.Math.BigInteger bi2 = новый Org.BouncyCastle.Math.BigInteger ("0");
Строка b58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
BOOL IgnoreChecksum = ложь;
Еогеасп (символ с в base58) {
если (b58.IndexOf (с)! = -1) {
bi2 = bi2.Multiply (новый Org.BouncyCastle.Math.BigInteger ("58"));
Bi2 = bi2.Add (новый Org.BouncyCastle.Math.BigInteger (b58.IndexOf (с) .ToString ()));
} Иначе, если (с == '?') {
IgnoreChecksum = истина;
} Еще {
возвращать нуль;
}
}
байт [] бб = bi2.ToByteArrayUnsigned ();
// интерпретировать ведущие «1 'в качестве ведущего нуля байтов
Еогеасп (символ с в base58) {
если (с = '1'!) перерыва;
байт [] = БББ новый байт [bb.Length + 1];
Array.Copy (бб, 0, БББ, 1, bb.Length);
BB = БББ;
}
если (bb.Length < 4) возвращение нулевой;
если (IgnoreChecksum == FALSE) {
SHA256CryptoServiceProvider sha256 = новый SHA256CryptoServiceProvider ();
байт [] = контрольная сумма sha256.ComputeHash (бб, 0, bb.Length - 4);
контрольная сумма = sha256.ComputeHash (контрольная сумма);
для (INT I = 0; я < 4; я ++) {
если (контрольная сумма [I] = бб [bb.Length - 4 + я]!) возвращение нулевой;
}
}
байт [] RV = новый байт [bb.Length - 4];
Array.Copy (бб, 0, Р. В., 0, bb.Length - 4);
вернуться Р.В.;
}
частная строка ByteArrayToString (байт [] ба) {
вернуть ByteArrayToString (ба, 0, ba.Length);
}
частная строка ByteArrayToString (байты [] ба, Int смещения, счетчик целого) {
строка с.в. = "";
INT usedcount = 0;
для (INT I = смещение; usedcount<рассчитывать; я ++, usedcount ++) {
с.в. + = String.Format ("{0: Х2}", Ба [I]) + " ";
}
вернуться Р.В.;
}
частная строка ByteArrayToBase58 (байт [] ба) {
Org.BouncyCastle.Math.BigInteger addrremain = новый Org.BouncyCastle.Math.BigInteger (1, ба);
Org.BouncyCastle.Math.BigInteger big0 = новый Org.BouncyCastle.Math.BigInteger ("0");
Org.BouncyCastle.Math.BigInteger big58 = новый Org.BouncyCastle.Math.BigInteger ("58");
Строка b58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
строка с.в. = "";
в то время как (addrremain.CompareTo (big0) > 0) {
INT д = Convert.ToInt32 (addrremain.Mod (big58) .ToString ());
addrremain = addrremain.Divide (big58);
с.в. = b58.Substring (д, 1) + с.в.;
}
// Обработать ведущие нули
Еогеасп (байт б в ба) {
если (б = 0!) перерыва;
с.в. = "1" + С.в.;
}
вернуться Р.В.;
}
частная строка ByteArrayToBase58Check (байт [] ба) {
байт [] бб = новый байт [ba.Length + 4];
Array.Copy (ба, бб, ba.Length);
SHA256CryptoServiceProvider sha256 = новый SHA256CryptoServiceProvider ();
байт [] thehash = sha256.ComputeHash (ба);
thehash = sha256.ComputeHash (thehash);
для (INT I = 0; я < 4; я ++) Bb [ba.Length + I] = thehash [I];
вернуть ByteArrayToBase58 (бб);
}
частный недействительным (отправитель объекта, EventArgs е) {button4_Click
вар пс = Org.BouncyCastle.Asn1.Sec.SecNamedCurves.GetByName ("secp256k1");
}
частные байты [] GetHexBytes (исходная строка, INT минимум) {
байт [] гекс = GetHexBytes (источник);
если (шестнадцатеричный == NULL) возвращения нуль;
// предполагает, что ведущие нули, если не хватает несколько байт
если (hex.Length > (Минимум-6) && hex.Length < минимум) {
байт [] hex2 = новый байт [минимальный];
Array.Copy (гекс, 0, hex2, минимальная - hex.Length, hex.Length);
гекс = hex2;
}
// обрезать один нависающий лидирующий нуль, если присутствуют
если (hex.Length == минимум + 1 && гекс [0] == 0) {
байт [] hex2 = новый байт [минимальный];
Array.Copy (гекс, 1, hex2, 0, минимум);
гекс = hex2;
}
вернуться шестигранник;
}
частные байты [] GetHexBytes (источник) {строка
Список<байт> байт = новый список<байт>();
// копия s в сс, добавляя пробелы между каждым байтом
струны з = источник;
строка сс = "";
INT currentbytelength = 0;
Еогеасп (символ с в s.ToCharArray ()) {
если (с == ' «) {
currentbytelength = 0;
} Еще {
currentbytelength ++;
если (currentbytelength == 3) {
currentbytelength = 1;
SS + = ' «;
}
}
SS + = с;
}
Еогеасп (строка б в ss.Split (»«)) {
INT v = 0;
если (b.Trim () == "") Продолжать;
Еогеасп (символ с в b.ToCharArray ()) {
если (с >= '0' && с <= '9') {
v * = 16;
V + = (с - '0');
} Иначе, если (с >= «А» && с <= 'Е') {
v * = 16;
V + = (с - 'а' + 10);
} Иначе, если (с >= «А» && с <= 'Р') {
v * = 16;
V + = (с - 'А' + 10);
}
}
v &= 0xff;
bytes.Add ((байт) v);
}
вернуть bytes.ToArray ();
}
частные байты [] ValidateAndGetHexPrivateKey (байты leadingbyte) {
байт [] гекс = GetHexBytes (txtPrivHex.Text, 32);
если (шестнадцатеричный == NULL || hex.Length < 32 || hex.Length > 33) {
MessageBox.Show ("Hex-это не 32 или 33 байта.");
возвращать нуль;
}
// если ведущие 00, измените его на 0x80
если (hex.Length == 33) {
если (гекс [0] == 0 || гекс [0] == 0x80) {
гекс [0] = 0x80;
} Еще {
MessageBox.Show ("Не действительный закрытый ключ");
возвращать нуль;
}
}
// добавить 0x80 байт, если нет
если (hex.Length == 32) {
байт [] hex2 = новый байт [33];
Array.Copy (гекс, 0, hex2, 1, 32);
hex2 [0] = 0x80;
гекс = hex2;
}
гекс [0] = leadingbyte;
вернуться шестигранник;
}
частные байты [] ValidateAndGetHexPublicKey () {
байт [] гекс = GetHexBytes (txtPubHex.Text, 64);
если (шестнадцатеричный == NULL || hex.Length < 64 || hex.Length > 65) {
MessageBox.Show ("Hex-это не 64 или 65 байт.");
возвращать нуль;
}
// если ведущие 00, измените его на 0x80
если (hex.Length == 65) {
если (гекс [0] == 0 || гекс [0] == 4) {
гекс [0] = 4;
} Еще {
MessageBox.Show ("Не действующий открытый ключ");
возвращать нуль;
}
}
// добавить 0x80 байт, если нет
если (hex.Length == 64) {
байт [] hex2 = новый байт [65];
Array.Copy (гекс, 0, hex2, 1, 64);
hex2 [0] = 4;
гекс = hex2;
}
вернуться шестигранник;
}
частные байты [] ValidateAndGetHexPublicHash () {
байт [] гекс = GetHexBytes (txtPubHash.Text, 20);
если (шестнадцатеричный == NULL || hex.Length! = 20) {
MessageBox.Show ("Hex не 20 байт.");
возвращать нуль;
}
вернуться шестигранник;
}
частная пустота btnPrivHexToWIF_Click (объект отправителя, EventArgs е) {
байт [] гекс = ValidateAndGetHexPrivateKey (0x80);
если (шестнадцатеричный == NULL) возвращение;
txtPrivWIF.Text = ByteArrayToBase58Check (шестнадцатеричный);
}
частная пустота btnPrivWIFToHex_Click (объект отправителя, EventArgs е) {
байт [] гекс = Base58ToByteArray (txtPrivWIF.Text);
если (шестнадцатеричный == NULL) {
INT L = txtPrivWIF.Text.Length;
если (L >= 50 && L <= 52) {
если (MessageBox.Show ("Закрытый ключ не является действительным. Попытка исправить?", "Неверный адрес", MessageBoxButtons.YesNo) == DialogResult.Yes) {
CorrectWIF ();
вернуть;
}
} Еще {
MessageBox.Show ("WIF закрытый ключ не является действительным.");
}
вернуть;
}
если (hex.Length! = 33) {
MessageBox.Show ("WIF закрытый ключ не является действительным (неправильным подсчетом байт, должно быть 33, был " + Hex.Length + ")");
вернуть;
}
txtPrivHex.Text = ByteArrayToString (гекс, 1, 32);
}
частная пустота btnPrivToPub_Click (объект отправителя, EventArgs е) {
байт [] гекс = ValidateAndGetHexPrivateKey (0x00);
если (шестнадцатеричный == NULL) возвращение;
вар пс = Org.BouncyCastle.Asn1.Sec.SecNamedCurves.GetByName ("secp256k1");
Org.BouncyCastle.Math.BigInteger Db = новый Org.BouncyCastle.Math.BigInteger (шестнадцатеричный);
ECPoint дд = ps.G.Multiply (Дб);
байт [] pubaddr = новый байт [65];
. Байт [] Y = dd.Y.ToBigInteger () ToByteArray ();
Array.Copy (Y, 0, pubaddr, 64 - Y.Length + 1, Y.Length);
байт [] Х = dd.X.ToBigInteger () ToByteArray ().
Array.Copy (Х, 0, pubaddr, 32 - x.length + 1, x.length);
pubaddr [0] = 4;
txtPubHex.Text = ByteArrayToString (pubaddr);
}
частная пустота btnPubHexToHash_Click (объект отправителя, EventArgs е) {
байт [] гекс = ValidateAndGetHexPublicKey ();
если (шестнадцатеричный == NULL) возвращение;
SHA256CryptoServiceProvider sha256 = новый SHA256CryptoServiceProvider ();
байт [] shaofpubkey = sha256.ComputeHash (шестнадцатеричный);
Ripemd160 отрываться = System.Security.Cryptography.RIPEMD160.Create ();
байт [] ripofpubkey = rip.ComputeHash (shaofpubkey);
txtPubHash.Text = ByteArrayToString (ripofpubkey);
}
частная пустота btnPubHashToAddress_Click (объект отправителя, EventArgs е) {
байт [] гекс = ValidateAndGetHexPublicHash ();
если (шестнадцатеричный == NULL) возвращение;
байт [] hex2 = новый байт [21];
Array.Copy (гекс, 0, hex2, 1, 20);
INT cointype = 0;
если (Int32.TryParse (cboCoinType.Text, из cointype) == ложь) cointype = 0;
если (cboCoinType.Text == "Testnet") Cointype = 111;
если (cboCoinType.Text == "Namecoin") Cointype = 52;
hex2 [0] = (байт) (cointype & 0xff);
txtBtcAddr.Text = ByteArrayToBase58Check (hex2);
}
частная пустота btnAddressToPubHash_Click (объект отправителя, EventArgs е) {
байт [] гекс = Base58ToByteArray (txtBtcAddr.Text);
если (шестнадцатеричный == NULL || hex.Length! = 21) {
INT L = txtBtcAddr.Text.Length;
если (L >= 33 && L <= 34) {
если (MessageBox.Show ("Адрес не является действительным. Попытка исправить?", "Неверный адрес", MessageBoxButtons.YesNo) == DialogResult.Yes) {
CorrectBitcoinAddress ();
вернуть;
}
} Еще {
MessageBox.Show ("Адрес не является действительным.");
}
вернуть;
}
txtPubHash.Text = ByteArrayToString (гекс, 1, 20);
}
частная пустота btnGenerate_Click (объект отправителя, EventArgs е) {
ECKeyPairGenerator ген = новый ECKeyPairGenerator ();
вар SecureRandom = новый SecureRandom ();
вар пс = Org.BouncyCastle.Asn1.Sec.SecNamedCurves.GetByName ("secp256k1");
вар ecParams = новые ECDomainParameters (ps.Curve, ps.G, ps.N, ps.H);
вар keyGenParam = новые ECKeyGenerationParameters (ecParams, SecureRandom);
gen.Init (keyGenParam);
AsymmetricCipherKeyPair кп = gen.GenerateKeyPair ();
ECPrivateKeyParameters собств = (ECPrivateKeyParameters) kp.Private;
байт [] hexpriv = priv.D.ToByteArrayUnsigned ();
txtPrivHex.Text = ByteArrayToString (hexpriv);
btnPrivHexToWIF_Click (NULL, NULL);
btnPrivToPub_Click (NULL, NULL);
btnPubHexToHash_Click (NULL, NULL);
btnPubHashToAddress_Click (NULL, NULL);
}
частная пустота btnBlockExplorer_Click (объект отправителя, EventArgs е) {
пытаться {
если (cboCoinType.Text == "Testnet") {
Process.Start ("http://www.blockexplorer.com/testnet/address/" + TxtBtcAddr.Text);
} Еще если (cboCoinType.Text == "Namecoin") {
Process.Start ("http://explorer.dot-bit.org/a/" + TxtBtcAddr.Text);
} Еще {
Process.Start ("http://www.blockexplorer.com/address/" + TxtBtcAddr.Text);
}
} поймать { }
}
частная пустота CorrectBitcoinAddress () {
txtBtcAddr.Text = Коррекция (txtBtcAddr.Text);
}
частная строка Correction (строка btcaddr) {
INT btcaddrlen = btcaddr.Length;
Строка b58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
для (INT I = 0; я < btcaddrlen; я ++) {
для (Int J = 0; J < 58; j ++) {
Строка попытка = btcaddr.Substring (0, я) + b58.Substring (к, 1) + btcaddr.Substring (г + 1);
байт [] байт = Base58ToByteArray (попытка);
если (байты! = NULL) {
MessageBox.Show ("Коррекция была успешной. Попробуйте повторить запрос.");
вернуть попытку;
}
}
}
вернуться btcaddr;
}
частная пустота CorrectWIF () {
txtPrivWIF.Text = Коррекция (txtPrivWIF.Text);
}
}
}
используя System.Collections.Generic;
используя System.ComponentModel;
используя System.Data;
используя System.Drawing;
используя System.Linq;
используя System.Text;
используя System.Diagnostics;
используя System.Windows.Forms;
используя System.Security.Cryptography;
используя Org.BouncyCastle.Asn1;
используя Org.BouncyCastle.Crypto;
используя Org.BouncyCastle.Crypto.Digests;
используя Org.BouncyCastle.Crypto.Generators;
используя Org.BouncyCastle.Crypto.Parameters;
используя Org.BouncyCastle.Security;
используя Org.BouncyCastle.Math.EC;
Пространство имен BtcAddress {
общественный частичный класс Form1: Form {
общественный Form1 () {
InitializeComponent ();
}
частные байты [] Base58ToByteArray (строка base58) {
Org.BouncyCastle.Math.BigInteger bi2 = новый Org.BouncyCastle.Math.BigInteger ("0");
Строка b58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
BOOL IgnoreChecksum = ложь;
Еогеасп (символ с в base58) {
если (b58.IndexOf (с)! = -1) {
bi2 = bi2.Multiply (новый Org.BouncyCastle.Math.BigInteger ("58"));
Bi2 = bi2.Add (новый Org.BouncyCastle.Math.BigInteger (b58.IndexOf (с) .ToString ()));
} Иначе, если (с == '?') {
IgnoreChecksum = истина;
} Еще {
возвращать нуль;
}
}
байт [] бб = bi2.ToByteArrayUnsigned ();
// интерпретировать ведущие «1 'в качестве ведущего нуля байтов
Еогеасп (символ с в base58) {
если (с = '1'!) перерыва;
байт [] = БББ новый байт [bb.Length + 1];
Array.Copy (бб, 0, БББ, 1, bb.Length);
BB = БББ;
}
если (bb.Length < 4) возвращение нулевой;
если (IgnoreChecksum == FALSE) {
SHA256CryptoServiceProvider sha256 = новый SHA256CryptoServiceProvider ();
байт [] = контрольная сумма sha256.ComputeHash (бб, 0, bb.Length - 4);
контрольная сумма = sha256.ComputeHash (контрольная сумма);
для (INT I = 0; я < 4; я ++) {
если (контрольная сумма [I] = бб [bb.Length - 4 + я]!) возвращение нулевой;
}
}
байт [] RV = новый байт [bb.Length - 4];
Array.Copy (бб, 0, Р. В., 0, bb.Length - 4);
вернуться Р.В.;
}
частная строка ByteArrayToString (байт [] ба) {
вернуть ByteArrayToString (ба, 0, ba.Length);
}
частная строка ByteArrayToString (байты [] ба, Int смещения, счетчик целого) {
строка с.в. = "";
INT usedcount = 0;
для (INT I = смещение; usedcount<рассчитывать; я ++, usedcount ++) {
с.в. + = String.Format ("{0: Х2}", Ба [I]) + " ";
}
вернуться Р.В.;
}
частная строка ByteArrayToBase58 (байт [] ба) {
Org.BouncyCastle.Math.BigInteger addrremain = новый Org.BouncyCastle.Math.BigInteger (1, ба);
Org.BouncyCastle.Math.BigInteger big0 = новый Org.BouncyCastle.Math.BigInteger ("0");
Org.BouncyCastle.Math.BigInteger big58 = новый Org.BouncyCastle.Math.BigInteger ("58");
Строка b58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
строка с.в. = "";
в то время как (addrremain.CompareTo (big0) > 0) {
INT д = Convert.ToInt32 (addrremain.Mod (big58) .ToString ());
addrremain = addrremain.Divide (big58);
с.в. = b58.Substring (д, 1) + с.в.;
}
// Обработать ведущие нули
Еогеасп (байт б в ба) {
если (б = 0!) перерыва;
с.в. = "1" + С.в.;
}
вернуться Р.В.;
}
частная строка ByteArrayToBase58Check (байт [] ба) {
байт [] бб = новый байт [ba.Length + 4];
Array.Copy (ба, бб, ba.Length);
SHA256CryptoServiceProvider sha256 = новый SHA256CryptoServiceProvider ();
байт [] thehash = sha256.ComputeHash (ба);
thehash = sha256.ComputeHash (thehash);
для (INT I = 0; я < 4; я ++) Bb [ba.Length + I] = thehash [I];
вернуть ByteArrayToBase58 (бб);
}
частный недействительным (отправитель объекта, EventArgs е) {button4_Click
вар пс = Org.BouncyCastle.Asn1.Sec.SecNamedCurves.GetByName ("secp256k1");
}
частные байты [] GetHexBytes (исходная строка, INT минимум) {
байт [] гекс = GetHexBytes (источник);
если (шестнадцатеричный == NULL) возвращения нуль;
// предполагает, что ведущие нули, если не хватает несколько байт
если (hex.Length > (Минимум-6) && hex.Length < минимум) {
байт [] hex2 = новый байт [минимальный];
Array.Copy (гекс, 0, hex2, минимальная - hex.Length, hex.Length);
гекс = hex2;
}
// обрезать один нависающий лидирующий нуль, если присутствуют
если (hex.Length == минимум + 1 && гекс [0] == 0) {
байт [] hex2 = новый байт [минимальный];
Array.Copy (гекс, 1, hex2, 0, минимум);
гекс = hex2;
}
вернуться шестигранник;
}
частные байты [] GetHexBytes (источник) {строка
Список<байт> байт = новый список<байт>();
// копия s в сс, добавляя пробелы между каждым байтом
струны з = источник;
строка сс = "";
INT currentbytelength = 0;
Еогеасп (символ с в s.ToCharArray ()) {
если (с == ' «) {
currentbytelength = 0;
} Еще {
currentbytelength ++;
если (currentbytelength == 3) {
currentbytelength = 1;
SS + = ' «;
}
}
SS + = с;
}
Еогеасп (строка б в ss.Split (»«)) {
INT v = 0;
если (b.Trim () == "") Продолжать;
Еогеасп (символ с в b.ToCharArray ()) {
если (с >= '0' && с <= '9') {
v * = 16;
V + = (с - '0');
} Иначе, если (с >= «А» && с <= 'Е') {
v * = 16;
V + = (с - 'а' + 10);
} Иначе, если (с >= «А» && с <= 'Р') {
v * = 16;
V + = (с - 'А' + 10);
}
}
v &= 0xff;
bytes.Add ((байт) v);
}
вернуть bytes.ToArray ();
}
частные байты [] ValidateAndGetHexPrivateKey (байты leadingbyte) {
байт [] гекс = GetHexBytes (txtPrivHex.Text, 32);
если (шестнадцатеричный == NULL || hex.Length < 32 || hex.Length > 33) {
MessageBox.Show ("Hex-это не 32 или 33 байта.");
возвращать нуль;
}
// если ведущие 00, измените его на 0x80
если (hex.Length == 33) {
если (гекс [0] == 0 || гекс [0] == 0x80) {
гекс [0] = 0x80;
} Еще {
MessageBox.Show ("Не действительный закрытый ключ");
возвращать нуль;
}
}
// добавить 0x80 байт, если нет
если (hex.Length == 32) {
байт [] hex2 = новый байт [33];
Array.Copy (гекс, 0, hex2, 1, 32);
hex2 [0] = 0x80;
гекс = hex2;
}
гекс [0] = leadingbyte;
вернуться шестигранник;
}
частные байты [] ValidateAndGetHexPublicKey () {
байт [] гекс = GetHexBytes (txtPubHex.Text, 64);
если (шестнадцатеричный == NULL || hex.Length < 64 || hex.Length > 65) {
MessageBox.Show ("Hex-это не 64 или 65 байт.");
возвращать нуль;
}
// если ведущие 00, измените его на 0x80
если (hex.Length == 65) {
если (гекс [0] == 0 || гекс [0] == 4) {
гекс [0] = 4;
} Еще {
MessageBox.Show ("Не действующий открытый ключ");
возвращать нуль;
}
}
// добавить 0x80 байт, если нет
если (hex.Length == 64) {
байт [] hex2 = новый байт [65];
Array.Copy (гекс, 0, hex2, 1, 64);
hex2 [0] = 4;
гекс = hex2;
}
вернуться шестигранник;
}
частные байты [] ValidateAndGetHexPublicHash () {
байт [] гекс = GetHexBytes (txtPubHash.Text, 20);
если (шестнадцатеричный == NULL || hex.Length! = 20) {
MessageBox.Show ("Hex не 20 байт.");
возвращать нуль;
}
вернуться шестигранник;
}
частная пустота btnPrivHexToWIF_Click (объект отправителя, EventArgs е) {
байт [] гекс = ValidateAndGetHexPrivateKey (0x80);
если (шестнадцатеричный == NULL) возвращение;
txtPrivWIF.Text = ByteArrayToBase58Check (шестнадцатеричный);
}
частная пустота btnPrivWIFToHex_Click (объект отправителя, EventArgs е) {
байт [] гекс = Base58ToByteArray (txtPrivWIF.Text);
если (шестнадцатеричный == NULL) {
INT L = txtPrivWIF.Text.Length;
если (L >= 50 && L <= 52) {
если (MessageBox.Show ("Закрытый ключ не является действительным. Попытка исправить?", "Неверный адрес", MessageBoxButtons.YesNo) == DialogResult.Yes) {
CorrectWIF ();
вернуть;
}
} Еще {
MessageBox.Show ("WIF закрытый ключ не является действительным.");
}
вернуть;
}
если (hex.Length! = 33) {
MessageBox.Show ("WIF закрытый ключ не является действительным (неправильным подсчетом байт, должно быть 33, был " + Hex.Length + ")");
вернуть;
}
txtPrivHex.Text = ByteArrayToString (гекс, 1, 32);
}
частная пустота btnPrivToPub_Click (объект отправителя, EventArgs е) {
байт [] гекс = ValidateAndGetHexPrivateKey (0x00);
если (шестнадцатеричный == NULL) возвращение;
вар пс = Org.BouncyCastle.Asn1.Sec.SecNamedCurves.GetByName ("secp256k1");
Org.BouncyCastle.Math.BigInteger Db = новый Org.BouncyCastle.Math.BigInteger (шестнадцатеричный);
ECPoint дд = ps.G.Multiply (Дб);
байт [] pubaddr = новый байт [65];
. Байт [] Y = dd.Y.ToBigInteger () ToByteArray ();
Array.Copy (Y, 0, pubaddr, 64 - Y.Length + 1, Y.Length);
байт [] Х = dd.X.ToBigInteger () ToByteArray ().
Array.Copy (Х, 0, pubaddr, 32 - x.length + 1, x.length);
pubaddr [0] = 4;
txtPubHex.Text = ByteArrayToString (pubaddr);
}
частная пустота btnPubHexToHash_Click (объект отправителя, EventArgs е) {
байт [] гекс = ValidateAndGetHexPublicKey ();
если (шестнадцатеричный == NULL) возвращение;
SHA256CryptoServiceProvider sha256 = новый SHA256CryptoServiceProvider ();
байт [] shaofpubkey = sha256.ComputeHash (шестнадцатеричный);
Ripemd160 отрываться = System.Security.Cryptography.RIPEMD160.Create ();
байт [] ripofpubkey = rip.ComputeHash (shaofpubkey);
txtPubHash.Text = ByteArrayToString (ripofpubkey);
}
частная пустота btnPubHashToAddress_Click (объект отправителя, EventArgs е) {
байт [] гекс = ValidateAndGetHexPublicHash ();
если (шестнадцатеричный == NULL) возвращение;
байт [] hex2 = новый байт [21];
Array.Copy (гекс, 0, hex2, 1, 20);
INT cointype = 0;
если (Int32.TryParse (cboCoinType.Text, из cointype) == ложь) cointype = 0;
если (cboCoinType.Text == "Testnet") Cointype = 111;
если (cboCoinType.Text == "Namecoin") Cointype = 52;
hex2 [0] = (байт) (cointype & 0xff);
txtBtcAddr.Text = ByteArrayToBase58Check (hex2);
}
частная пустота btnAddressToPubHash_Click (объект отправителя, EventArgs е) {
байт [] гекс = Base58ToByteArray (txtBtcAddr.Text);
если (шестнадцатеричный == NULL || hex.Length! = 21) {
INT L = txtBtcAddr.Text.Length;
если (L >= 33 && L <= 34) {
если (MessageBox.Show ("Адрес не является действительным. Попытка исправить?", "Неверный адрес", MessageBoxButtons.YesNo) == DialogResult.Yes) {
CorrectBitcoinAddress ();
вернуть;
}
} Еще {
MessageBox.Show ("Адрес не является действительным.");
}
вернуть;
}
txtPubHash.Text = ByteArrayToString (гекс, 1, 20);
}
частная пустота btnGenerate_Click (объект отправителя, EventArgs е) {
ECKeyPairGenerator ген = новый ECKeyPairGenerator ();
вар SecureRandom = новый SecureRandom ();
вар пс = Org.BouncyCastle.Asn1.Sec.SecNamedCurves.GetByName ("secp256k1");
вар ecParams = новые ECDomainParameters (ps.Curve, ps.G, ps.N, ps.H);
вар keyGenParam = новые ECKeyGenerationParameters (ecParams, SecureRandom);
gen.Init (keyGenParam);
AsymmetricCipherKeyPair кп = gen.GenerateKeyPair ();
ECPrivateKeyParameters собств = (ECPrivateKeyParameters) kp.Private;
байт [] hexpriv = priv.D.ToByteArrayUnsigned ();
txtPrivHex.Text = ByteArrayToString (hexpriv);
btnPrivHexToWIF_Click (NULL, NULL);
btnPrivToPub_Click (NULL, NULL);
btnPubHexToHash_Click (NULL, NULL);
btnPubHashToAddress_Click (NULL, NULL);
}
частная пустота btnBlockExplorer_Click (объект отправителя, EventArgs е) {
пытаться {
если (cboCoinType.Text == "Testnet") {
Process.Start ("http://www.blockexplorer.com/testnet/address/" + TxtBtcAddr.Text);
} Еще если (cboCoinType.Text == "Namecoin") {
Process.Start ("http://explorer.dot-bit.org/a/" + TxtBtcAddr.Text);
} Еще {
Process.Start ("http://www.blockexplorer.com/address/" + TxtBtcAddr.Text);
}
} поймать { }
}
частная пустота CorrectBitcoinAddress () {
txtBtcAddr.Text = Коррекция (txtBtcAddr.Text);
}
частная строка Correction (строка btcaddr) {
INT btcaddrlen = btcaddr.Length;
Строка b58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
для (INT I = 0; я < btcaddrlen; я ++) {
для (Int J = 0; J < 58; j ++) {
Строка попытка = btcaddr.Substring (0, я) + b58.Substring (к, 1) + btcaddr.Substring (г + 1);
байт [] байт = Base58ToByteArray (попытка);
если (байты! = NULL) {
MessageBox.Show ("Коррекция была успешной. Попробуйте повторить запрос.");
вернуть попытку;
}
}
}
вернуться btcaddr;
}
частная пустота CorrectWIF () {
txtPrivWIF.Text = Коррекция (txtPrivWIF.Text);
}
}
}
Файл: Form1.Designer.cs
Код:
Пространство имен BtcAddress {
Частичный класс Form1 {
/// <резюме>
/// Обязательный переменную дизайнера.
/// резюме>
частные System.ComponentModel.IContainer компоненты = NULL;
/// <резюме>
/// Очистка любых ресурсов используется.
/// резюме>
/// <Имя параметра ="утилизации">Истинные, если управляемые ресурсы должны быть утилизированы; в противном случае, ложь. пары>
переопределение защищен недействительными Dispose (BOOL утилизации) {
если (утилизации && (Компоненты! = NULL)) {
components.Dispose ();
}
base.Dispose (утилизация);
}
#region Windows Form Designer сгенерированный код
/// <резюме>
/// Обязательный метод для поддержки конструктора - не изменяйте
/// содержимое этого метода с редактором кода.
/// резюме>
частная пустота InitializeComponent () {
this.txtPrivWIF = новый System.Windows.Forms.TextBox ();
this.label1 = новый System.Windows.Forms.Label ();
this.txtPrivHex = новый System.Windows.Forms.TextBox ();
this.label2 = новый System.Windows.Forms.Label ();
this.label3 = новый System.Windows.Forms.Label ();
this.txtPubHex = новый System.Windows.Forms.TextBox ();
this.label4 = новый System.Windows.Forms.Label ();
this.txtPubHash = новый System.Windows.Forms.TextBox ();
this.label5 = новый System.Windows.Forms.Label ();
this.txtBtcAddr = новый System.Windows.Forms.TextBox ();
this.btnAddressToPubHash = новый System.Windows.Forms.Button ();
this.btnPubHashToAddress = новый System.Windows.Forms.Button ();
this.btnPubHexToHash = новый System.Windows.Forms.Button ();
this.btnPrivToPub = новый System.Windows.Forms.Button ();
this.btnPrivWIFToHex = новый System.Windows.Forms.Button ();
this.btnPrivHexToWIF = новый System.Windows.Forms.Button ();
this.btnGenerate = новый System.Windows.Forms.Button ();
this.btnBlockExplorer = новый System.Windows.Forms.Button ();
this.cboCoinType = новый System.Windows.Forms.ComboBox ();
this.SuspendLayout ();
//
// txtPrivWIF
//
this.txtPrivWIF.Location = новый System.Drawing.Point (103, 12);
this.txtPrivWIF.Name = "txtPrivWIF";
this.txtPrivWIF.Size = новый System.Drawing.Size (557, 20);
this.txtPrivWIF.TabIndex = 7;
//
// label1
//
this.label1.AutoSize = TRUE;
this.label1.Location = новый System.Drawing.Point (7, 15);
this.label1.Name = "label1";
this.label1.Size = новый System.Drawing.Size (90, 13);
this.label1.TabIndex = 8;
this.label1.Text = "Private Key (WIF)";
//
// txtPrivHex
//
this.txtPrivHex.Location = новый System.Drawing.Point (103, 70);
this.txtPrivHex.Name = "txtPrivHex";
this.txtPrivHex.Size = новый System.Drawing.Size (557, 20);
this.txtPrivHex.TabIndex = 9;
//
// label2
//
this.label2.AutoSize = TRUE;
this.label2.Location = новый System.Drawing.Point (7, 73);
this.label2.Name = "label2";
this.label2.Size = новый System.Drawing.Size (89, 13);
this.label2.TabIndex = 10;
this.label2.Text = "Private Key (Hex)";
//
// Метка3
//
this.label3.AutoSize = TRUE;
this.label3.Location = новый System.Drawing.Point (7, 131);
this.label3.Name = "Метка3";
this.label3.Size = новый System.Drawing.Size (85, 13);
this.label3.TabIndex = 12;
this.label3.Text = "Открытый ключ (Hex)";
//
// txtPubHex
//
this.txtPubHex.Location = новый System.Drawing.Point (103, 128);
this.txtPubHex.Multiline = TRUE;
this.txtPubHex.Name = "txtPubHex";
this.txtPubHex.Size = новый System.Drawing.Size (557, 43);
this.txtPubHex.TabIndex = 11;
//
// label4
//
this.label4.AutoSize = TRUE;
this.label4.Location = новый System.Drawing.Point (7, 216);
this.label4.Name = "label4";
this.label4.Size = новый System.Drawing.Size (91, 13);
this.label4.TabIndex = 14;
this.label4.Text = "Открытый ключ (Hash)";
//
// txtPubHash
//
this.txtPubHash.Location = новый System.Drawing.Point (103, 213);
this.txtPubHash.Name = "txtPubHash";
this.txtPubHash.Size = новый System.Drawing.Size (557, 20);
this.txtPubHash.TabIndex = 13;
//
// label5
//
this.label5.AutoSize = TRUE;
this.label5.Location = новый System.Drawing.Point (7, 274);
this.label5.Name = "label5";
this.label5.Size = новый System.Drawing.Size (45, 13);
this.label5.TabIndex = 16;
this.label5.Text = "Адрес";
//
// txtBtcAddr
//
this.txtBtcAddr.Location = новый System.Drawing.Point (103, 271);
this.txtBtcAddr.Name = "txtBtcAddr";
this.txtBtcAddr.Size = новый System.Drawing.Size (557, 20);
this.txtBtcAddr.TabIndex = 15;
//
// btnAddressToPubHash
//
this.btnAddressToPubHash.Location = новый System.Drawing.Point (286, 235);
this.btnAddressToPubHash.Name = "btnAddressToPubHash";
this.btnAddressToPubHash.Size = новый System.Drawing.Size (46, 30);
this.btnAddressToPubHash.TabIndex = 18;
this.btnAddressToPubHash.Text = "▲";
this.btnAddressToPubHash.UseVisualStyleBackColor = TRUE;
this.btnAddressToPubHash.Click + = новый System.EventHandler (this.btnAddressToPubHash_Click);
//
// btnPubHashToAddress
//
this.btnPubHashToAddress.Location = новый System.Drawing.Point (334, 235);
this.btnPubHashToAddress.Name = "btnPubHashToAddress";
this.btnPubHashToAddress.Size = новый System.Drawing.Size (46, 30);
this.btnPubHashToAddress.TabIndex = 19;
this.btnPubHashToAddress.Text = "▼";
this.btnPubHashToAddress.UseVisualStyleBackColor = TRUE;
this.btnPubHashToAddress.Click + = новый System.EventHandler (this.btnPubHashToAddress_Click);
//
// btnPubHexToHash
//
this.btnPubHexToHash.Location = новый System.Drawing.Point (334, 177);
this.btnPubHexToHash.Name = "btnPubHexToHash";
this.btnPubHexToHash.Size = новый System.Drawing.Size (46, 30);
this.btnPubHexToHash.TabIndex = 21;
this.btnPubHexToHash.Text = "▼";
this.btnPubHexToHash.UseVisualStyleBackColor = TRUE;
this.btnPubHexToHash.Click + = новый System.EventHandler (this.btnPubHexToHash_Click);
//
// btnPrivToPub
//
this.btnPrivToPub.Location = новый System.Drawing.Point (334, 92);
this.btnPrivToPub.Name = "btnPrivToPub";
this.btnPrivToPub.Size = новый System.Drawing.Size (46, 30);
this.btnPrivToPub.TabIndex = 23;
this.btnPrivToPub.Text = "▼";
this.btnPrivToPub.UseVisualStyleBackColor = TRUE;
this.btnPrivToPub.Click + = новый System.EventHandler (this.btnPrivToPub_Click);
//
// btnPrivWIFToHex
//
this.btnPrivWIFToHex.Location = новый System.Drawing.Point (334, 34);
this.btnPrivWIFToHex.Name = "btnPrivWIFToHex";
this.btnPrivWIFToHex.Size = новый System.Drawing.Size (46, 30);
this.btnPrivWIFToHex.TabIndex = 25;
this.btnPrivWIFToHex.Text = "▼";
this.btnPrivWIFToHex.UseVisualStyleBackColor = TRUE;
this.btnPrivWIFToHex.Click + = новый System.EventHandler (this.btnPrivWIFToHex_Click);
//
// btnPrivHexToWIF
//
this.btnPrivHexToWIF.Location = новый System.Drawing.Point (286, 34);
this.btnPrivHexToWIF.Name = "btnPrivHexToWIF";
this.btnPrivHexToWIF.Size = новый System.Drawing.Size (46, 30);
this.btnPrivHexToWIF.TabIndex = 24;
this.btnPrivHexToWIF.Text = "▲";
this.btnPrivHexToWIF.UseVisualStyleBackColor = TRUE;
this.btnPrivHexToWIF.Click + = новый System.EventHandler (this.btnPrivHexToWIF_Click);
//
// btnGenerate
//
this.btnGenerate.Location = новый System.Drawing.Point (492, 34);
this.btnGenerate.Name = "btnGenerate";
this.btnGenerate.Size = новый System.Drawing.Size (168, 30);
this.btnGenerate.TabIndex = 26;
this.btnGenerate.Text = "Генерация адреса";
this.btnGenerate.UseVisualStyleBackColor = TRUE;
this.btnGenerate.Click + = новый System.EventHandler (this.btnGenerate_Click);
//
// btnBlockExplorer
//
this.btnBlockExplorer.Location = новый System.Drawing.Point (492, 235);
this.btnBlockExplorer.Name = "btnBlockExplorer";
this.btnBlockExplorer.Size = новый System.Drawing.Size (167, 29);
this.btnBlockExplorer.TabIndex = 27;
this.btnBlockExplorer.Text = "Блок Проводник";
this.btnBlockExplorer.UseVisualStyleBackColor = TRUE;
this.btnBlockExplorer.Click + = новый System.EventHandler (this.btnBlockExplorer_Click);
//
// cboCoinType
//
this.cboCoinType.FormattingEnabled = TRUE;
this.cboCoinType.Items.AddRange (новый объект [] {
"Bitcoin",
"Testnet",
"Namecoin"});
this.cboCoinType.Location = новый System.Drawing.Point (382, 239);
this.cboCoinType.Name = "cboCoinType";
this.cboCoinType.Size = новый System.Drawing.Size (101, 21);
this.cboCoinType.TabIndex = 29;
this.cboCoinType.Text = "Bitcoin";
//
// Form1
//
this.AutoScaleDimensions = новый System.Drawing.SizeF (6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = новый System.Drawing.Size (670, 302);
this.Controls.Add (this.cboCoinType);
this.Controls.Add (this.btnBlockExplorer);
this.Controls.Add (this.btnGenerate);
this.Controls.Add (this.btnPrivWIFToHex);
this.Controls.Add (this.btnPrivHexToWIF);
this.Controls.Add (this.btnPrivToPub);
this.Controls.Add (this.btnPubHexToHash);
this.Controls.Add (this.btnPubHashToAddress);
this.Controls.Add (this.btnAddressToPubHash);
this.Controls.Add (this.label5);
this.Controls.Add (this.txtBtcAddr);
this.Controls.Add (this.label4);
this.Controls.Add (this.txtPubHash);
this.Controls.Add (this.label3);
this.Controls.Add (this.txtPubHex);
this.Controls.Add (this.label2);
this.Controls.Add (this.txtPrivHex);
this.Controls.Add (this.label1);
this.Controls.Add (this.txtPrivWIF);
this.Name = "Form1";
this.Text = "Bitcoin Адрес утилиту Casascius (Beta, нет гарантии)";
this.ResumeLayout (ложь);
this.PerformLayout ();
}
#endregion
частный System.Windows.Forms.TextBox txtPrivWIF;
частный System.Windows.Forms.Label label1;
частный System.Windows.Forms.TextBox txtPrivHex;
частный System.Windows.Forms.Label label2;
частный System.Windows.Forms.Label Метка3;
частный System.Windows.Forms.TextBox txtPubHex;
частный System.Windows.Forms.Label label4;
частный System.Windows.Forms.TextBox txtPubHash;
частный System.Windows.Forms.Label label5;
частный System.Windows.Forms.TextBox txtBtcAddr;
частный System.Windows.Forms.Button btnAddressToPubHash;
частный System.Windows.Forms.Button btnPubHashToAddress;
частный System.Windows.Forms.Button btnPubHexToHash;
частный System.Windows.Forms.Button btnPrivToPub;
частный System.Windows.Forms.Button btnPrivWIFToHex;
частный System.Windows.Forms.Button btnPrivHexToWIF;
частный System.Windows.Forms.Button btnGenerate;
частный System.Windows.Forms.Button btnBlockExplorer;
частный System.Windows.Forms.ComboBox cboCoinType;
}
}
Частичный класс Form1 {
/// <резюме>
/// Обязательный переменную дизайнера.
/// резюме>
частные System.ComponentModel.IContainer компоненты = NULL;
/// <резюме>
/// Очистка любых ресурсов используется.
/// резюме>
/// <Имя параметра ="утилизации">Истинные, если управляемые ресурсы должны быть утилизированы; в противном случае, ложь. пары>
переопределение защищен недействительными Dispose (BOOL утилизации) {
если (утилизации && (Компоненты! = NULL)) {
components.Dispose ();
}
base.Dispose (утилизация);
}
#region Windows Form Designer сгенерированный код
/// <резюме>
/// Обязательный метод для поддержки конструктора - не изменяйте
/// содержимое этого метода с редактором кода.
/// резюме>
частная пустота InitializeComponent () {
this.txtPrivWIF = новый System.Windows.Forms.TextBox ();
this.label1 = новый System.Windows.Forms.Label ();
this.txtPrivHex = новый System.Windows.Forms.TextBox ();
this.label2 = новый System.Windows.Forms.Label ();
this.label3 = новый System.Windows.Forms.Label ();
this.txtPubHex = новый System.Windows.Forms.TextBox ();
this.label4 = новый System.Windows.Forms.Label ();
this.txtPubHash = новый System.Windows.Forms.TextBox ();
this.label5 = новый System.Windows.Forms.Label ();
this.txtBtcAddr = новый System.Windows.Forms.TextBox ();
this.btnAddressToPubHash = новый System.Windows.Forms.Button ();
this.btnPubHashToAddress = новый System.Windows.Forms.Button ();
this.btnPubHexToHash = новый System.Windows.Forms.Button ();
this.btnPrivToPub = новый System.Windows.Forms.Button ();
this.btnPrivWIFToHex = новый System.Windows.Forms.Button ();
this.btnPrivHexToWIF = новый System.Windows.Forms.Button ();
this.btnGenerate = новый System.Windows.Forms.Button ();
this.btnBlockExplorer = новый System.Windows.Forms.Button ();
this.cboCoinType = новый System.Windows.Forms.ComboBox ();
this.SuspendLayout ();
//
// txtPrivWIF
//
this.txtPrivWIF.Location = новый System.Drawing.Point (103, 12);
this.txtPrivWIF.Name = "txtPrivWIF";
this.txtPrivWIF.Size = новый System.Drawing.Size (557, 20);
this.txtPrivWIF.TabIndex = 7;
//
// label1
//
this.label1.AutoSize = TRUE;
this.label1.Location = новый System.Drawing.Point (7, 15);
this.label1.Name = "label1";
this.label1.Size = новый System.Drawing.Size (90, 13);
this.label1.TabIndex = 8;
this.label1.Text = "Private Key (WIF)";
//
// txtPrivHex
//
this.txtPrivHex.Location = новый System.Drawing.Point (103, 70);
this.txtPrivHex.Name = "txtPrivHex";
this.txtPrivHex.Size = новый System.Drawing.Size (557, 20);
this.txtPrivHex.TabIndex = 9;
//
// label2
//
this.label2.AutoSize = TRUE;
this.label2.Location = новый System.Drawing.Point (7, 73);
this.label2.Name = "label2";
this.label2.Size = новый System.Drawing.Size (89, 13);
this.label2.TabIndex = 10;
this.label2.Text = "Private Key (Hex)";
//
// Метка3
//
this.label3.AutoSize = TRUE;
this.label3.Location = новый System.Drawing.Point (7, 131);
this.label3.Name = "Метка3";
this.label3.Size = новый System.Drawing.Size (85, 13);
this.label3.TabIndex = 12;
this.label3.Text = "Открытый ключ (Hex)";
//
// txtPubHex
//
this.txtPubHex.Location = новый System.Drawing.Point (103, 128);
this.txtPubHex.Multiline = TRUE;
this.txtPubHex.Name = "txtPubHex";
this.txtPubHex.Size = новый System.Drawing.Size (557, 43);
this.txtPubHex.TabIndex = 11;
//
// label4
//
this.label4.AutoSize = TRUE;
this.label4.Location = новый System.Drawing.Point (7, 216);
this.label4.Name = "label4";
this.label4.Size = новый System.Drawing.Size (91, 13);
this.label4.TabIndex = 14;
this.label4.Text = "Открытый ключ (Hash)";
//
// txtPubHash
//
this.txtPubHash.Location = новый System.Drawing.Point (103, 213);
this.txtPubHash.Name = "txtPubHash";
this.txtPubHash.Size = новый System.Drawing.Size (557, 20);
this.txtPubHash.TabIndex = 13;
//
// label5
//
this.label5.AutoSize = TRUE;
this.label5.Location = новый System.Drawing.Point (7, 274);
this.label5.Name = "label5";
this.label5.Size = новый System.Drawing.Size (45, 13);
this.label5.TabIndex = 16;
this.label5.Text = "Адрес";
//
// txtBtcAddr
//
this.txtBtcAddr.Location = новый System.Drawing.Point (103, 271);
this.txtBtcAddr.Name = "txtBtcAddr";
this.txtBtcAddr.Size = новый System.Drawing.Size (557, 20);
this.txtBtcAddr.TabIndex = 15;
//
// btnAddressToPubHash
//
this.btnAddressToPubHash.Location = новый System.Drawing.Point (286, 235);
this.btnAddressToPubHash.Name = "btnAddressToPubHash";
this.btnAddressToPubHash.Size = новый System.Drawing.Size (46, 30);
this.btnAddressToPubHash.TabIndex = 18;
this.btnAddressToPubHash.Text = "▲";
this.btnAddressToPubHash.UseVisualStyleBackColor = TRUE;
this.btnAddressToPubHash.Click + = новый System.EventHandler (this.btnAddressToPubHash_Click);
//
// btnPubHashToAddress
//
this.btnPubHashToAddress.Location = новый System.Drawing.Point (334, 235);
this.btnPubHashToAddress.Name = "btnPubHashToAddress";
this.btnPubHashToAddress.Size = новый System.Drawing.Size (46, 30);
this.btnPubHashToAddress.TabIndex = 19;
this.btnPubHashToAddress.Text = "▼";
this.btnPubHashToAddress.UseVisualStyleBackColor = TRUE;
this.btnPubHashToAddress.Click + = новый System.EventHandler (this.btnPubHashToAddress_Click);
//
// btnPubHexToHash
//
this.btnPubHexToHash.Location = новый System.Drawing.Point (334, 177);
this.btnPubHexToHash.Name = "btnPubHexToHash";
this.btnPubHexToHash.Size = новый System.Drawing.Size (46, 30);
this.btnPubHexToHash.TabIndex = 21;
this.btnPubHexToHash.Text = "▼";
this.btnPubHexToHash.UseVisualStyleBackColor = TRUE;
this.btnPubHexToHash.Click + = новый System.EventHandler (this.btnPubHexToHash_Click);
//
// btnPrivToPub
//
this.btnPrivToPub.Location = новый System.Drawing.Point (334, 92);
this.btnPrivToPub.Name = "btnPrivToPub";
this.btnPrivToPub.Size = новый System.Drawing.Size (46, 30);
this.btnPrivToPub.TabIndex = 23;
this.btnPrivToPub.Text = "▼";
this.btnPrivToPub.UseVisualStyleBackColor = TRUE;
this.btnPrivToPub.Click + = новый System.EventHandler (this.btnPrivToPub_Click);
//
// btnPrivWIFToHex
//
this.btnPrivWIFToHex.Location = новый System.Drawing.Point (334, 34);
this.btnPrivWIFToHex.Name = "btnPrivWIFToHex";
this.btnPrivWIFToHex.Size = новый System.Drawing.Size (46, 30);
this.btnPrivWIFToHex.TabIndex = 25;
this.btnPrivWIFToHex.Text = "▼";
this.btnPrivWIFToHex.UseVisualStyleBackColor = TRUE;
this.btnPrivWIFToHex.Click + = новый System.EventHandler (this.btnPrivWIFToHex_Click);
//
// btnPrivHexToWIF
//
this.btnPrivHexToWIF.Location = новый System.Drawing.Point (286, 34);
this.btnPrivHexToWIF.Name = "btnPrivHexToWIF";
this.btnPrivHexToWIF.Size = новый System.Drawing.Size (46, 30);
this.btnPrivHexToWIF.TabIndex = 24;
this.btnPrivHexToWIF.Text = "▲";
this.btnPrivHexToWIF.UseVisualStyleBackColor = TRUE;
this.btnPrivHexToWIF.Click + = новый System.EventHandler (this.btnPrivHexToWIF_Click);
//
// btnGenerate
//
this.btnGenerate.Location = новый System.Drawing.Point (492, 34);
this.btnGenerate.Name = "btnGenerate";
this.btnGenerate.Size = новый System.Drawing.Size (168, 30);
this.btnGenerate.TabIndex = 26;
this.btnGenerate.Text = "Генерация адреса";
this.btnGenerate.UseVisualStyleBackColor = TRUE;
this.btnGenerate.Click + = новый System.EventHandler (this.btnGenerate_Click);
//
// btnBlockExplorer
//
this.btnBlockExplorer.Location = новый System.Drawing.Point (492, 235);
this.btnBlockExplorer.Name = "btnBlockExplorer";
this.btnBlockExplorer.Size = новый System.Drawing.Size (167, 29);
this.btnBlockExplorer.TabIndex = 27;
this.btnBlockExplorer.Text = "Блок Проводник";
this.btnBlockExplorer.UseVisualStyleBackColor = TRUE;
this.btnBlockExplorer.Click + = новый System.EventHandler (this.btnBlockExplorer_Click);
//
// cboCoinType
//
this.cboCoinType.FormattingEnabled = TRUE;
this.cboCoinType.Items.AddRange (новый объект [] {
"Bitcoin",
"Testnet",
"Namecoin"});
this.cboCoinType.Location = новый System.Drawing.Point (382, 239);
this.cboCoinType.Name = "cboCoinType";
this.cboCoinType.Size = новый System.Drawing.Size (101, 21);
this.cboCoinType.TabIndex = 29;
this.cboCoinType.Text = "Bitcoin";
//
// Form1
//
this.AutoScaleDimensions = новый System.Drawing.SizeF (6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = новый System.Drawing.Size (670, 302);
this.Controls.Add (this.cboCoinType);
this.Controls.Add (this.btnBlockExplorer);
this.Controls.Add (this.btnGenerate);
this.Controls.Add (this.btnPrivWIFToHex);
this.Controls.Add (this.btnPrivHexToWIF);
this.Controls.Add (this.btnPrivToPub);
this.Controls.Add (this.btnPubHexToHash);
this.Controls.Add (this.btnPubHashToAddress);
this.Controls.Add (this.btnAddressToPubHash);
this.Controls.Add (this.label5);
this.Controls.Add (this.txtBtcAddr);
this.Controls.Add (this.label4);
this.Controls.Add (this.txtPubHash);
this.Controls.Add (this.label3);
this.Controls.Add (this.txtPubHex);
this.Controls.Add (this.label2);
this.Controls.Add (this.txtPrivHex);
this.Controls.Add (this.label1);
this.Controls.Add (this.txtPrivWIF);
this.Name = "Form1";
this.Text = "Bitcoin Адрес утилиту Casascius (Beta, нет гарантии)";
this.ResumeLayout (ложь);
this.PerformLayout ();
}
#endregion
частный System.Windows.Forms.TextBox txtPrivWIF;
частный System.Windows.Forms.Label label1;
частный System.Windows.Forms.TextBox txtPrivHex;
частный System.Windows.Forms.Label label2;
частный System.Windows.Forms.Label Метка3;
частный System.Windows.Forms.TextBox txtPubHex;
частный System.Windows.Forms.Label label4;
частный System.Windows.Forms.TextBox txtPubHash;
частный System.Windows.Forms.Label label5;
частный System.Windows.Forms.TextBox txtBtcAddr;
частный System.Windows.Forms.Button btnAddressToPubHash;
частный System.Windows.Forms.Button btnPubHashToAddress;
частный System.Windows.Forms.Button btnPubHexToHash;
частный System.Windows.Forms.Button btnPrivToPub;
частный System.Windows.Forms.Button btnPrivWIFToHex;
частный System.Windows.Forms.Button btnPrivHexToWIF;
частный System.Windows.Forms.Button btnGenerate;
частный System.Windows.Forms.Button btnBlockExplorer;
частный System.Windows.Forms.ComboBox cboCoinType;
}
}
Файл: Program.cs
Код:
с использованием системы;
используя System.Collections.Generic;
используя System.Linq;
используя System.Windows.Forms;
Пространство имен BtcAddress {
статический класс Program {
/// <резюме>
/// Главная точка входа для приложения.
/// резюме>
[STAThread]
статическая сила Main () {
Application.EnableVisualStyles ();
Application.SetCompatibleTextRenderingDefault (ложь);
Application.Run (новый Form1 ());
}
}
}