Cifrado de archivos en WinRT
Frecuentes
Visto 2,718 equipos
2
Actualmente estoy trabajando en una aplicación metropolitana (C#/XAML) que requiere cifrado de archivos. En Winforms y WPF para eso solo necesito escribir
System.IO.File.Encrypt("file.txt");
¿Cómo hacer lo mismo en WinRT?
3 Respuestas
4
Primero, nunca usaría System.IO.File.Encrypt para cifrar un archivo.
En segundo lugar, echaría un vistazo a la siguiente documentación: API de tiempo de ejecución de Windows
Tercero, encriptaría el archivo usando un método similar descrito aquí y aquí
public MainWindow()
{
InitializeComponent();
byte[] encryptedPassword;
// Create a new instance of the RijndaelManaged
// class. This generates a new key and initialization
// vector (IV).
using (var algorithm = new RijndaelManaged())
{
algorithm.KeySize = 256;
algorithm.BlockSize = 128;
// Encrypt the string to an array of bytes.
encryptedPassword = Cryptology.EncryptStringToBytes("Password",
algorithm.Key, algorithm.IV);
}
string chars = encryptedPassword.Aggregate(string.Empty,
(current, b) => current + b.ToString());
Cryptology.EncryptFile(@"C:\Users\Ira\Downloads\test.txt", @"C:\Users\Ira\Downloads\encrypted_test.txt", chars);
Cryptology.DecryptFile(@"C:\Users\Ira\Downloads\encrypted_test.txt", @"C:\Users\Ira\Downloads\unencyrpted_test.txt", chars);
}
Respondido el 04 de Septiembre de 13 a las 13:09
1
Según tengo entendido, WinRT está diseñado para aplicaciones que se ejecutan en un espacio aislado y no tienen acceso directo al sistema de archivos.
Probablemente necesitará un servicio que no sea WinRT (por ejemplo, API de escritorio Win32/.NET) para el acceso directo al sistema de archivos y que la aplicación WinRT se comunique con el servicio.
contestado el 03 de mayo de 12 a las 17:05
0
Desafortunadamente, esto requerirá un poco más de trabajo en WinRT. Dado que la mayoría de las funciones son asíncronas, necesitará más placa de caldera y estará operando en corrientes y IBuffer
s en lugar de archivos directamente. Las clases criptográficas están en el Windows.Security.Cryptography
espacio de nombres
Un ejemplo con un IBuffer
puede ser encontrado aquí.
contestado el 03 de mayo de 12 a las 17:05
Esto no se integrará con el sistema de archivos de ninguna manera, por ejemplo, cosas como el acceso multiusuario, la revocación del acceso si se cambia la contraseña a la fuerza y los certificados de recuperación no funcionarán. - ben voigt
Eso es cierto, pero el OP no menciona la necesidad de un cifrado integrado del sistema de archivos, solo el cifrado de un archivo. Esto es posible utilizando la API antes mencionada. Su publicación menciona el uso de un servicio para acceder al sistema de archivos que es justo y la elección correcta si la integración del sistema de archivos es un requisito. - usuariolinux27
Supongo que interpreto "hacer lo mismo" como un requisito para usar EFS. - ben voigt
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c# windows-8 windows-runtime or haz tu propia pregunta.
@ Kip9000: algunos de los cambios de su código no son válidos y en realidad cambian el código. Sus cambios no mejoraron nada, no estoy seguro del propósito del cambio, el formato estuvo bien. - Sabueso de seguridad
El código se formateó para que encajara sin que la barra de desplazamiento fuera visible. Se modificó el código para eliminar las rutas de archivo largas porque son superfluas. Las rutas de archivo largas no agregan nada al código más que dificultar su lectura. - Indy9000
@ Kip9000: no creo que sean superfluos y no estoy de acuerdo con el cambio. Preferiría eliminar la respuesta y luego permitir que se cambie. - Sabueso de seguridad
Si está tan convencido del cambio, haga lo que le plazca. :) - Indy9000