[Ответить в тред] Ответить в тред

15/11/16 - **НОВЫЙ ФУНКЦИОНАЛ** - Стикеры
09/10/16 - Открыта доска /int/ - International, давайте расскажем о ней!
30/09/16 - BREAKING NEWS ШОК АБУ ПРОДАЛСЯ МЭЙЛУ (на самом деле нет)


Новые доски: /2d/ - Аниме/Беседка • /wwe/ - WorldWide Wrestling Universe • /ch/ - Чатики и конфочки • /int/ - International • /ruvn/ - Российские визуальные новеллы • /math/ - Математика • Создай свою

[Назад][Обновить тред][Вниз][Каталог] [ Автообновление ] 9 | 1 | 8
Назад Вниз Каталог Обновить

Шифрование файлов Аноним 10/03/16 Чтв 10:42:03  20339  
(17Кб, 978x497)
Сап, криптач, я - нуб. Интересует тема шифрования файлов. В интернетах советуют GPG, но там по умолчанию используется шифрование с открытым ключом, а я где-то читал, что такие шифры менее стойкие нежели симметричные. Так же там есть возможность использовать симметричное шифрование, но тогда будут сложности с хранением ключа.
Как делать правильно? Например, шифровать ключ от какого-нибудь AES асимметричным шифром и хранить его в отдельном файле, или ещё что.
В инструкциях по GPG ничего на эту тему найти не смог.
Аноним 10/03/16 Чтв 11:05:13  20342
>>20339 (OP)
самые стойки - ассиметричные
самые быстрые - симметричные

для файлов, очевидно, симметричные удобнее в плане скорости.

Короч юзай truecrypt и не еби мозг
Аноним 10/03/16 Чтв 11:11:28  20344
>>20339 (OP)
а нах тебе шифрование файлов в 10ке? Она же транслирует майору все нажатия клавиш и скрин экрана
Аноним 10/03/16 Чтв 11:16:23  20345
>>20344
Пик рандомный.
Аноним 10/03/16 Чтв 18:01:37  20382
>>20339 (OP)
>я где-то читал, что такие шифры менее стойкие
Где читал, там и спрашивай.
В GPG гибридное шифрование.
Аноним 15/03/16 Втр 19:18:47  20781
https://ru.wikipedia.org/wiki/%D0%A8%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%B0%D1%8F_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0
Годно ли?
Еболик !rNcrTNdJD6 18/03/16 Птн 23:26:41  20916
Проиграл с оп-пика.
Аноним 21/03/16 Пнд 17:38:41  21000
>>20339 (OP)
>>20339 (OP)
троль что ле
асимметричное и симметричное это разные методы для разных случаев. Сравнивать, что надёжней - это как сравнивать автомат и бронеавтомобиль. Ну для разных вещей это.

GPG использует и то, шифрование, и другое, как луковица.

Симметричое шифрование - самый баян. Оно использует пароль, который применяется для шифрования данных, и расшифровывания. Если ты хранишь файл с цопэ для себя и от майора, то этого тебе вполне достаточно. Если тебе надо передать цопэ другу Боре в Зажопинск, то помимо зашифрованного файла тебе придётся передать ему и этот пароль. Как это сделать так, чтобы тов. майор его не узнал и не прочёл этот файл тоже? Можешь передать его голубем, по телефону. Но если это невозможно, или не удобно, то тебе нужно асимметричное шифрование.

Его суть в том, что есть две половинки ключа. Одну половину, она называется секретный или приватный ключ, Боря должен держать в тайне и никогда никому не показывать. Другую половину (публичный или открытый ключ) Боря отдаёт тебе. Он может прислать её тебе по электронке. Ты при помощи этой половинки шифруешь пароль от своего архива с цопе и пересылаешь результат шифрования Боре.

Алгоритм асимметричного шифрования математически основан на том, что только Боря при помощи своей половинки (секретного ключа) может расшифровать твоё сообщение. Из него он получит пароль к симметричному шифру и вскорет архив с цопэ. А тов. майор никогда не сможет перехватить пароль симметричного шифра, т.к. тот никогда не передавался в открытом виде.

Собственно, PGP (или его GNU-сный аналог GPG) делает то же самое. Генерит случайный пароль, шифрует им файл, шифрует пароль открытым ключом АДРЕСАТА.

Ключевые слова: симметричные шифры AES, DES, DES3 .
Асимметричные слова: RSA
Процедура получения общего секретного ключа, неизвестного третьей стороне: DH (Diffie-Hellman).
С !D2AmOUNA7c 22/03/16 Втр 14:14:53  21026
using UnityEngine;
using System;
using System.Collections;
using System.Security.Cryptography;
using System.IO;
using System.Text;

public class PlayerPrefsSet : MonoBehaviour {

//секретные коды, которые используются для шифровки
static readonly string PasswordHash = "P@@Sw0rd";
static readonly string SaltKey = "S@LT&KEY";
static readonly string VIKey = "@1B2c3D4e5F6g7H8";
//Функция получения текстовой переменной из префов
public string Text;
void Update()
{
Debug.Log ("Encrypt ["+Encrypt (Text)+"]");
Debug.Log ("Decrypt ["+Decrypt(Encrypt (Text))+"]");
}

//функция, которая шифрает переменную, вникать не надо, тут просто процесс шифровки, его менять никак не надо
public string Encrypt(string plainText)
{
byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);

byte[] keyBytes = new Rfc2898DeriveBytes(PasswordHash, Encoding.ASCII.GetBytes(SaltKey)).GetBytes(256 / 8);
var symmetricKey = new RijndaelManaged() { Mode = CipherMode.CBC, Padding = PaddingMode.Zeros };
var encryptor = symmetricKey.CreateEncryptor(keyBytes, Encoding.ASCII.GetBytes(VIKey));

byte[] cipherTextBytes;

using (var memoryStream = new MemoryStream())
{
using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
{
cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);
cryptoStream.FlushFinalBlock();
cipherTextBytes = memoryStream.ToArray();
cryptoStream.Close();
}
memoryStream.Close();
}
return Convert.ToBase64String(cipherTextBytes);
}

//функция дешифровки, такж, как и функция шифвровки

public string Decrypt(string encryptedText)
{
byte[] cipherTextBytes = Convert.FromBase64String(encryptedText);
byte[] keyBytes = new Rfc2898DeriveBytes(PasswordHash, Encoding.ASCII.GetBytes(SaltKey)).GetBytes(256 / 8);
var symmetricKey = new RijndaelManaged() { Mode = CipherMode.CBC, Padding = PaddingMode.None };

var decryptor = symmetricKey.CreateDecryptor(keyBytes, Encoding.ASCII.GetBytes(VIKey));
var memoryStream = new MemoryStream(cipherTextBytes);
var cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read);
byte[] plainTextBytes = new byte[cipherTextBytes.Length];

int decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
memoryStream.Close();
cryptoStream.Close();
return Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount).TrimEnd("\0".ToCharArray());
}
}
Аноним 25/03/16 Птн 11:44:16  21315
namespace RsaCryptoExample
{
static class Program
{
static void Main()
{
//lets take a new CSP with a new 2048 bit rsa key pair
var csp = new RSACryptoServiceProvider(2048);

//how to get the private key
var privKey = csp.ExportParameters(true);

//and the public key ...
var pubKey = csp.ExportParameters(false);

//converting the public key into a string representation
string pubKeyString;
{
//we need some buffer
var sw = new System.IO.StringWriter();
//we need a serializer
var xs = new System.Xml.Serialization.XmlSerializer(typeof(RSAParameters));
//serialize the key into the stream
xs.Serialize(sw, pubKey);
//get the string from the stream
pubKeyString = sw.ToString();
}

//converting it back
{
//get a stream from the string
var sr = new System.IO.StringReader(pubKeyString);
//we need a deserializer
var xs = new System.Xml.Serialization.XmlSerializer(typeof(RSAParameters));
//get the object back from the stream
pubKey = (RSAParameters)xs.Deserialize(sr);
}

//conversion for the private key is no black magic either ... omitted

//we have a public key ... let's get a new csp and load that key
csp = new RSACryptoServiceProvider();
csp.ImportParameters(pubKey);

//we need some data to encrypt
var plainTextData = "foobar";

//for encryption, always handle bytes...
var bytesPlainTextData = System.Text.Encoding.Unicode.GetBytes(plainTextData);

//apply pkcs#1.5 padding and encrypt our data
var bytesCypherText = csp.Encrypt(bytesPlainTextData, false);

//we might want a string representation of our cypher text... base64 will do
var cypherText = Convert.ToBase64String(bytesCypherText);


/
some transmission / storage / retrieval

and we want to decrypt our cypherText
*/

//first, get our bytes back from the base64 string ...
bytesCypherText = Convert.FromBase64String(cypherText);

//we want to decrypt, therefore we need a csp and load our private key
csp = new RSACryptoServiceProvider();
csp.ImportParameters(privKey);

//decrypt and strip pkcs#1.5 padding
bytesPlainTextData = csp.Decrypt(bytesCypherText, false);

//get our original plainText back...
plainTextData = System.Text.Encoding.Unicode.GetString(bytesPlainTextData);
}
}
}

[Назад][Обновить тред][Вверх][Каталог] [Реквест разбана] [Подписаться на тред] [ ] 9 | 1 | 8
Назад Вверх Каталог Обновить

Топ тредов
Избранное