C # шифрование и дешифрование - PullRequest
1 голос
/ 22 апреля 2009

C # 2005 Я использую простое шифрование и дешифрование для IP-адреса. Приложение на удаленном сервере зашифрует IP-адрес, а клиент расшифрует его. Однако, когда клиент расшифровывает IP-адрес, я возвращаю только часть IP-адреса. Остальное мусор. До: 123.456.78.98 После: фхех & ^ G.78.98

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

 /// Encrypt the SIP IP address in the remote server
        private void encryptSIP_IP(string sip_ip)
        {
            TripleDESCryptoServiceProvider encrypt = new TripleDESCryptoServiceProvider();

        /// Private key
        byte[] key = { 0, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 144, 89, 55, 34, 21, 13, 8, 5, 3, 2, 1, 0};

        encrypt.Key = key;
        byte[] byteSIP = System.Text.Encoding.Default.GetBytes(sip_ip);

            ICryptoTransform encryptor = encrypt.CreateEncryptor();
             byte[] encrypted_sip = encryptor.TransformFinalBlock(byteSIP, 0, byteSIP.Length);



/// This will decrypt in the client application
        private void decryptSIP_IP(byte[] encrypted_sip)
        {
            TripleDESCryptoServiceProvider decrypt = new TripleDESCryptoServiceProvider();
            /// Private key
            byte[] key = { 0, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 144, 89, 55, 34, 21, 13, 8, 5, 3, 2, 1, 0 };
            decrypt.Key = key;
            ICryptoTransform decryptor = decrypt.CreateDecryptor();

            byte[] original = decryptor.TransformFinalBlock(encrypted_sip, 0, encrypted_sip.Length);
            string ip = System.Text.Encoding.Default.GetString(original);
        }
        }

Ответы [ 3 ]

8 голосов
/ 22 апреля 2009

Вместе с ключом вам необходим Вектор инициализации (8 байт для вашего случая):

// To Encrypt
encrypt.IV = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };

// Use same IV to decrypt
decrypt.IV = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
2 голосов
/ 22 апреля 2009

Как уже сказал Дарин, вам нужно установить вектор инициализации. Если возможно, выберите случайное значение для каждого процесса шифрования и передайте / сохраните его в виде открытого текста.

Кстати, вы должны заглянуть в CryptoStream вместо того, чтобы работать с TransformBlock / TransformFinalBlock ... это намного чище, имхо.

1 голос
/ 22 апреля 2009

Вы пытались установить кодировку явно с обеих сторон? Может быть, по умолчанию другое.

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