Как зашифровать сообщение с помощью открытого ключа адреса Ethereum

Я пишу код в nodejs /browser. Я успешно создал ethereum-адреса с secp256k1 -библиотекой. Я также мог подписывать и проверять сообщения. Теперь я хочу зашифровать /дешифровать сообщение открытым и закрытым ключом сгенерированных адресов. Кто-нибудь делал это раньше? Могу ли я использовать CryptoJS для достижения своей цели?

22 голоса | спросил pubkey 16 PMpSat, 16 Apr 2016 23:02:02 +030002Saturday 2016, 23:02:02

2 ответа


24

thx @Edmunx Edgar, я пытался использовать ECIES, но он не смог установить из-за поддепозиции. Я теперь использовал bitcore-lib вместе с bitcore-ecies . Это работает, как и ожидалось.

EDIT: Я создал npm-модули, которые точно выполняют тезисы, а также имеют некоторые оптимизации производительности и учебные пособия : github: eth-crypto .

Вот мой код для кого-то с тем же вопросом:

var testIdentity= {
            type: 'ethereum',
            display: '0x54dbb737eac5007103e729e9ab7ce64a6850a310',
            privateKey: '52435b1ff11b894da15d87399011841d5edec2de4552fdc29c8299574436924d',
            publicKey: '029678ad0aa2fbd7f212239e21ed1472e84ca558fecf70a54bbf7901d89c306191',
            foreign: false
        };
var message = "foobar";
var bitcore = require('bitcore-lib');
var ECIES = require('bitcore-ecies');

    /**
     * encrypt the message with the publicKey of identity
     * @param  {{privateKey: ?string, publicKey: string}} identity
     * @param  {string} message
     * @return {string}
     */
    var encrypt = function(identity, message) {

        /*
         * this key is used as false sample, because bitcore would crash when alice has no privateKey
         */
        var privKey = new bitcore.PrivateKey('52435b1ff21b894da15d87399011841d5edec2de4552fdc29c8299574436925d');
        var alice = ECIES().privateKey(privKey).publicKey(new bitcore.PublicKey(identity.publicKey));
        var encrypted = alice.encrypt(message);

        return encrypted.toString('hex');
    };

    /**
     * decrypt the message with the privateKey of identity
     * @param  {{privateKey: ?string, publicKey: string}}   identity
     * @param  {string}   encrypted
     * @return {string}   message
     */
    var decrypt = function(identity, encrypted) {
        var privKey = new bitcore.PrivateKey(identity.privateKey);
        var alice = ECIES().privateKey(privKey);

        var decryptMe = new Buffer(encrypted, 'hex');

        var decrypted = alice.decrypt(decryptMe);
        return decrypted.toString('ascii');
    };



var enc = encrypt(testIdentity, message);
var dec = decrypt(testIdentity, enc);

if(dec!=message){
  alert('error');
}else{
  alert('sucess');
}

JS-FIDDLE .

ответил pubkey 17 PMpSun, 17 Apr 2016 22:29:39 +030029Sunday 2016, 22:29:39
10

Предполагая, что у вас есть открытый ключ человека, которому вы хотите отправить сообщение (если они уже подписали транзакцию, вы можете восстановить ее из подписи), ее можно будет зашифровать и расшифровать с помощью ECIES. По-видимому, для этого есть библиотека JavaScript, я предполагаю, что вы можете использовать ее в браузере: https://bitcointalk.org/index.php?topic=627927.0

Я понятия не имею, насколько эти библиотеки достаточно хороши для безопасного использования.

Другой подход заключается в создании отдельной пары ключей, которая фактически предназначена для шифрования, затем используйте ключ Ethereum для подписывания открытого ключа и отправки его другой стороне.

ответил Edmund Edgar 17 AMpSun, 17 Apr 2016 02:07:33 +030007Sunday 2016, 02:07:33

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132