Вернуться   Биткоин Форум > Разработка и Техническое Обсуждение
1 июля 2011, 6:30:16 PM   # 1
 
 
Сообщения: 1372
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin Адрес Utility Я сделал (Visual C #, Source Only)

Взлом Биткоин адресов.
500 Биткоинов взломаны в "мозговом кошельке" с паролем "bitcoin is awesome"
Адрес кошелька: 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE
Приватный ключ: 5J64pq77XjeacCezwmAr2V1s7snvvJkuAz8sENxw7xCkikceV6e
подробнее...


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru


Это утилита, я сделал, что делает все следующие преобразования:

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);
        }
    }
}



Файл: 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;

    }
}




Файл: Program.cs
Код:

с использованием системы;
используя System.Collections.Generic;
используя System.Linq;
используя System.Windows.Forms;

Пространство имен BtcAddress {
    статический класс Program {
        /// <резюме>
        /// Главная точка входа для приложения.
        ///
        [STAThread]
        статическая сила Main () {
            Application.EnableVisualStyles ();
            Application.SetCompatibleTextRenderingDefault (ложь);
            Application.Run (новый Form1 ());
        }
    }
}

casascius сейчас офлайн Пожаловаться на casascius   Ответить с цитированием Мультицитирование сообщения от casascius Быстрый ответ на сообщение casascius


Как заработать Биткоины?
Без вложений. Не майнинг.


1 июля 2011, 6:52:57 PM   # 2
 
 
Сообщения: 672
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin Адрес Utility Я сделал (Visual C #, Source Only)

Получил 1806 Биткоинов
Реальная история.





Очень аккуратно! Было бы необходимо иметь на Windows Live CD!

Вид родственных, но что бы адрес, который имеет такой вид, как с контрольной суммой:

sacrifice4othersprosperity

bitlotto сейчас офлайн Пожаловаться на bitlotto   Ответить с цитированием Мультицитирование сообщения от bitlotto Быстрый ответ на сообщение bitlotto

1 июля 2011, 6:57:30 PM   # 3
 
 
Сообщения: 1372
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin Адрес Utility Я сделал (Visual C #, Source Only)

Очень аккуратно! Было бы необходимо иметь на Windows Live CD!

Вид родственных, но что бы адрес, который имеет такой вид, как с контрольной суммой:

sacrifice4othersprosperity



5Jsacrifice4othersprosperity7yjoaJR7mF7Sm1kEibnLCp8 -> 15N3i5weYye7UB4G3G3UbJsn2Bym8LWvFm

В моей утилиты, вы можете заменить символы закрытого ключа, и есть утилита пересчитать контрольную сумму. Конечно, вы можете только заменить символы в основании 58 алфавита, так что исключает O-I л.

Генерация случайного адреса, а затем добавить знак вопроса в WIF закрытого ключа (выключает контрольную сумму). Запасные символы. Преобразовать в шестнадцатеричном, а затем обратно в WIF (который заменит контрольную сумму с действительным один). Обратите внимание, что если изменить общее количество символов, от 51, вы получите обратно мусор, поэтому убедитесь, что количество символов правильно.

Это, как я сделал свой "тщеславие закрытые ключи",

После того, как у вас есть рабочий тщеславия закрытый ключ, который не остается той же, независимо от того, какой путь вы преобразовать его, а затем сгенерировать открытый ключ и Bitcoin адрес от него.
casascius сейчас офлайн Пожаловаться на casascius   Ответить с цитированием Мультицитирование сообщения от casascius Быстрый ответ на сообщение casascius

1 июля 2011, 7:03:05 PM   # 4
 
 
Сообщения: 1358
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin Адрес Utility Я сделал (Visual C #, Source Only)

Аккуратный проект!

Что вы планируете использовать тщеславие частные ключи? Есть ли смысл в этом? Похоже, отходы поставить тщеславие в единственной части информации, которая не раскрываются общественность.
SgtSpike сейчас офлайн Пожаловаться на SgtSpike   Ответить с цитированием Мультицитирование сообщения от SgtSpike Быстрый ответ на сообщение SgtSpike

1 июля 2011, 7:07:48 PM   # 5
 
 
Сообщения: 1372
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin Адрес Utility Я сделал (Visual C #, Source Only)

Аккуратный проект!

Что вы планируете использовать тщеславие частные ключи? Есть ли смысл в этом? Похоже, отходы поставить тщеславие в единственной части информации, которая не раскрываются общественность.

Ничего особенного ... Однако, применение доставки закрытых ключей, скорее всего, имеют множество применений, все из которых могут содержать тщеславие закрытые ключи ...

  • Bitbills
  • Offline сберегательных бумажники (бумажные кошельки)
  • Bitcoin подарки (там, где это уместно, даритель может забрать BTC, если получатель никогда не искупает их ... например геокэшинг)
  • Покер фишки со встроенным значением Bitcoin
  • Bitcoin розничных карт (где человек может купить BTC в розничной торговле так же, как они покупают поздравительную открытку ... они соскоблить закрытый ключ, чтобы получить свои монеты)
  • Computerless передача стоимости монет между сторонами, которые доверяют друг другу (например, чек)
casascius сейчас офлайн Пожаловаться на casascius   Ответить с цитированием Мультицитирование сообщения от casascius Быстрый ответ на сообщение casascius

1 июля 2011, 7:08:32 PM   # 6
 
 
Сообщения: 672
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin Адрес Utility Я сделал (Visual C #, Source Only)

Аккуратный проект!

Что вы планируете использовать тщеславие частные ключи? Есть ли смысл в этом? Похоже, отходы поставить тщеславие в единственной части информации, которая не раскрываются общественность.
Возможно изготовление карты Bitcoin может поставить PIN-код в закрытый ключ. Затем, когда вы выкупить его торговец попросит недостающую часть?
bitlotto сейчас офлайн Пожаловаться на bitlotto   Ответить с цитированием Мультицитирование сообщения от bitlotto Быстрый ответ на сообщение bitlotto

1 июля 2011, 7:10:05 PM   # 7
 
 
Сообщения: 1372
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin Адрес Utility Я сделал (Visual C #, Source Only)

Аккуратный проект!

Что вы планируете использовать тщеславие частные ключи? Есть ли смысл в этом? Похоже, отходы поставить тщеславие в единственной части информации, которая не раскрываются общественность.
Возможно изготовление карты Bitcoin может поставить PIN-код в закрытый ключ. Затем, когда вы выкупить его торговец попросит недостающую часть?

Это не было бы безопасно, один зная "большинство" частного ключа может легко грубой силой остаток.
casascius сейчас офлайн Пожаловаться на casascius   Ответить с цитированием Мультицитирование сообщения от casascius Быстрый ответ на сообщение casascius

1 июля 2011, 7:12:43 PM   # 8
 
 
Сообщения: 672
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin Адрес Utility Я сделал (Visual C #, Source Only)

Аккуратный проект!

Что вы планируете использовать тщеславие частные ключи? Есть ли смысл в этом? Похоже, отходы поставить тщеславие в единственной части информации, которая не раскрываются общественность.
Возможно изготовление карты Bitcoin может поставить PIN-код в закрытый ключ. Затем, когда вы выкупить его торговец попросит недостающую часть?

Это не было бы безопасно, один зная "большинство" частного ключа может легко грубой силой остаток.
Я знаю. Я хватался за соломинку. ЛОЛ.
bitlotto сейчас офлайн Пожаловаться на bitlotto   Ответить с цитированием Мультицитирование сообщения от bitlotto Быстрый ответ на сообщение bitlotto

1 июля 2011, 7:17:47 PM   # 9
 
 
Сообщения: 294
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin Адрес Utility Я сделал (Visual C #, Source Only)

Не уверен, что если вы видели это или нет, но я играл с этим в течение нескольких дней в настоящее время ...

http://code.google.com/p/bitcoinsharp
BitterTea сейчас офлайн Пожаловаться на BitterTea   Ответить с цитированием Мультицитирование сообщения от BitterTea Быстрый ответ на сообщение BitterTea

1 июля 2011, 10:25:16 PM   # 10
 
 
Сообщений: 54
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin Адрес Utility Я сделал (Visual C #, Source Only)

Можно ли включать в себя интерфейс командной строки (режим без GUI) для этой программы?

Мои извинения, если она уже включает в себя это, и я просто как-то пропустили.

Большое спасибо.
loglow сейчас офлайн Пожаловаться на loglow   Ответить с цитированием Мультицитирование сообщения от loglow Быстрый ответ на сообщение loglow

14 сентября 2011, 3:22:01 AM   # 11
 
 
Сообщения: 430
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin Адрес Utility Я сделал (Visual C #, Source Only)

очень хорошая программа!
pointbiz сейчас офлайн Пожаловаться на pointbiz   Ответить с цитированием Мультицитирование сообщения от pointbiz Быстрый ответ на сообщение pointbiz

14 сентября 2011, 4:28:13 AM   # 12
 
 
Сообщения: 322
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin Адрес Utility Я сделал (Visual C #, Source Only)

Можно ли включать в себя интерфейс командной строки (режим без GUI) для этой программы?

Мои извинения, если она уже включает в себя это, и я просто как-то пропустили.

Большое спасибо.

Нет ли уже CLI инструменты для этого?
nhodges сейчас офлайн Пожаловаться на nhodges   Ответить с цитированием Мультицитирование сообщения от nhodges Быстрый ответ на сообщение nhodges

7 ноября 2012, 3:19:20 PM   # 13
 
 
Сообщения: 1372
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin Адрес Utility Я сделал (Visual C #, Source Only)

Последние обновления размещены на https://casascius.com/btcaddress-alpha.zip :

* Банкнота ваучер принтер теперь может печатать заметки с minikeys.
* Новые опции на главном экране, чтобы скопировать
  • в буфер обмена как код графической QR для вставки в другие программы, где
  • может быть Bitcoin адрес, minikey, закрытый ключ, или публичный хэш.

Другие обновления, которые были описаны в другом месте, но не в этой теме:

* Бумажник бумаги и банкнот Ваучер принтер позволяет печатать несколько цветов победителя недавнего конкурса Bitcoin банкнот.
* Base58 Калькулятор позволяет произвольные преобразования значений base58 шестнадцатеричное и наоборот, независимо от длины. Добавить "?" до конца любой base58 строки приостановить проверку контрольной суммы.
* Поддержка сжатых открытых ключей, а также возможность конвертировать между сжатым и несжатым.
* Классы для управления Bitcoin адресов / pubkeys / privkeys / minikeys были переработаны и созрели для соскабливания и использования в других проектах, если это необходимо. Вы можете получить программный доступ к функциям главного "Bitcoin адрес швейцарский армейский нож" экран в вашей собственной программе, просто присваивая классы адрес, ОткрытыйКлюч, KeyPair и MiniKeyPair.

Как всегда, это программа для Windows, и основана на Microsoft .NET и Visual Studio. Исходный код включен в почтовом индексе.
casascius сейчас офлайн Пожаловаться на casascius   Ответить с цитированием Мультицитирование сообщения от casascius Быстрый ответ на сообщение casascius

7 ноября 2012, 3:22:27 PM   # 14
 
 
Сообщения: 2660
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin Адрес Utility Я сделал (Visual C #, Source Only)

Вы можете поставить его на GitHub?
HostFat сейчас офлайн Пожаловаться на HostFat   Ответить с цитированием Мультицитирование сообщения от HostFat Быстрый ответ на сообщение HostFat

11 апреля 2013, 11:22:30 AM   # 15
 
 
Сообщения: 2436
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin Адрес Utility Я сделал (Visual C #, Source Only)

Я не разобраться в этом. Не могу даже сказать, на каком языке это.

Не смотрел трудно, но, возможно, кто-то может дать мне подсказку? Как скомпилировать / запустить?

молекулярный сейчас офлайн Пожаловаться на молекулярном   Ответить с цитированием Мультицитирование сообщения от молекулярного Быстрый ответ на сообщение молекулярным

11 апреля 2013, 7:47:22 PM   # 16
 
 
Сообщения: 390
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin Адрес Utility Я сделал (Visual C #, Source Only)

Это от Microsoft C #. Вы можете получить бесплатную / облегченную версию Visual Studio 2012 и может быть в состоянии собрать его. (Я не могу думать о какой-либо причине, почему он не смог бы, но я не пробовал). Будем надеяться, чтобы вы идете в правильном направлении, хотя.
MashRinx сейчас офлайн Пожаловаться на MashRinx   Ответить с цитированием Мультицитирование сообщения от MashRinx Быстрый ответ на сообщение MashRinx

12 апреля 2013, 10:11:23 AM   # 17
 
 
Сообщения: 2436
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin Адрес Utility Я сделал (Visual C #, Source Only)

Это от Microsoft C #. Вы можете получить бесплатную / облегченную версию Visual Studio 2012 и может быть в состоянии собрать его. (Я не могу думать о какой-либо причине, почему он не смог бы, но я не пробовал). Будем надеяться, чтобы вы идете в правильном направлении, хотя.

не преуменьшать эту работу, но м $ это просто не для меня. Там множество питона / JS / кода Java вокруг, также.
молекулярный сейчас офлайн Пожаловаться на молекулярном   Ответить с цитированием Мультицитирование сообщения от молекулярного Быстрый ответ на сообщение молекулярным

19 апреля 2013, 5:50:08 PM   # 18
 
 
Сообщений: 89
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin Адрес Utility Я сделал (Visual C #, Source Only)

Спасибо за этот инструмент. Я надеялся использовать это для проверки адресов из brainwallet / bitaddress. Может кто-нибудь объяснить, как компилировать это на этапе Linux / Ubuntu за шагом? или если у вас есть скомпилированные версии для этой ОС, удивительный! Спасибо
samadamsbeer сейчас офлайн Пожаловаться на samadamsbeer   Ответить с цитированием Мультицитирование сообщения от samadamsbeer Быстрый ответ на сообщение samadamsbeer

16 августа 2017, 4:11:31 AM   # 19
 
 
Сообщения: 266
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin Адрес Utility Я сделал (Visual C #, Source Only)

извините за натыкаясь старую нить.

но icame от поиска Google.

Можно ли запустить этот код в командной строке Linux?
btctousd81 сейчас офлайн Пожаловаться на btctousd81   Ответить с цитированием Мультицитирование сообщения от btctousd81 Быстрый ответ на сообщение btctousd81

16 августа 2017, 5:04:54 PM   # 20
 
 
Сообщения: 428
Цитировать по имени
цитировать ответ
по умолчанию Re: Bitcoin Адрес Utility Я сделал (Visual C #, Source Only)

Можно ли запустить этот код в командной строке Linux?

Если вы просто хотите функциональность, но конкретно не заинтересован в C #, то вы, вероятно, лучше использовать что-то другое. Python, например, гораздо проще в использовании. Или что-то вроде этого: https://github.com/grondilu/bitcoin-bash-tools (У меня нет обратной связи по этому вопросу, я просто его в своих звездах).

Если вы настаиваете на использовании C #, то вам нужно работать с .Net Ядра https://www.microsoft.com/net/core#linuxubuntu
Есть несколько ответов здесь, которые также могут помочь:
https://stackoverflow.com/questions/20392243/run-c-sharp-code-on-linux-terminal

Более полная библиотека: https://github.com/MetacoSA/NBitcoin
Кодирование Энтузиаст сейчас офлайн Пожаловаться на Coding Энтузиаст   Ответить с цитированием Мультицитирование сообщения от Coding Энтузиаст Быстрый ответ на сообщение Coding Энтузиаст



Как заработать Биткоины?

Bitcoin Wallet * Portefeuille Bitcoin * Monedero Bitcoin * Carteira Bitcoin * Portafoglio Bitcoin * Bitcoin Cüzdan * 比特币钱包

bitcoin-zarabotat.ru
Почта для связи: bitcoin-zarabotat.ru@yandex.ru

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW