Windows Phone 7:解密独立存储中的许多文件
本文关键字:许多 文件 存储 独立 Phone 解密 Windows | 更新日期: 2023-09-27 18:33:50
我正在尝试使用一个程序,该程序将许多(5-15).txt文件存储在手机的独立存储内存中。我注意到使用Windows Phone Power Tools等程序读取这些文件是多么容易,所以我决定加密它们。我使用此链接作为教程:
http://msdn.microsoft.com/en-us/library/windows/apps/hh487164(v=vs.105).aspx
加密工作正常,因为我显然一次保存一个文件。但是,我在尝试解密它们时遇到了问题。我应该如何编辑我的代码,以便我可以解密许多.txt文件?以下是我目前使用的代码:
private void IsoRead()
{
System.IO.IsolatedStorage.IsolatedStorageFile local =
System.IO.IsolatedStorage.IsolatedStorageFile.GetUserStoreForApplication();
string[] filenames = local.GetFileNames("./DataFolder/*.txt*");
foreach (var fname in filenames)
{
//retrieve byte
byte[] ProtectedByte = this.DecryptByte();
//decrypt with Unprotect method
byte[] FromByte = ProtectedData.Unprotect(ProtectedByte, null);
//convert from byte to string
fText = Encoding.UTF8.GetString(FromByte, 0, FromByte.Length);
this.Items.Add(new itemView() { LineOne = fname, LineTwo = fText });
}
}
另一个:
private byte[] DecryptByte()
{
// Access the file in the application's isolated storage.
IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication();
IsolatedStorageFileStream readstream = new IsolatedStorageFileStream
("DataFolder''"/*Here's where I'm having problems with*/, System.IO.FileMode.Open, FileAccess.Read, file);
// Read the written data from the file.
Stream reader = new StreamReader(readstream).BaseStream;
byte[] dataArray = new byte[reader.Length];
reader.Read(dataArray, 0, dataArray.Length);
return dataArray;
}
所以基本上该程序有一个列表视图页面,可以从独立存储中获取文件。如果触摸到一个,它会转到一个新页面,显示其中所写的内容。
奖励问题:我可以加密WP7/WP8中的文件夹吗?
编辑:在IsoRead中添加了一个代码行。
Xaml:
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<StackPanel>
<Button Content="Write Random File" Click="WriteFile" VerticalAlignment="Top" />
<Button Content="Read files File" Click="ReadFiles" VerticalAlignment="Top" />
</StackPanel>
</Grid>
法典:
public partial class MainPage : PhoneApplicationPage
{
// Constructor
public MainPage()
{
InitializeComponent();
}
private const string FilePath = "{0}.txt";
private readonly List<ItemView> items = new List<ItemView>();
private void WriteFile(object sender, RoutedEventArgs e)
{
var fileName = DateTime.Now.Ticks.ToString(CultureInfo.InvariantCulture);
// Convert text to bytes.
byte[] data = Encoding.UTF8.GetBytes(fileName);
// Encrypt byutes.
byte[] protectedBytes = ProtectedData.Protect(data, null);
// Store the encrypted bytes in iso storage.
this.WriteToFile(protectedBytes, fileName);
}
private void ReadFiles(object sender, RoutedEventArgs e)
{
items.Clear();
using (var isoStore = IsolatedStorageFile.GetUserStoreForApplication())
{
var files = isoStore.GetFileNames("*.txt");
foreach (var file in files)
{
// Retrieve the protected bytes from isolated storage.
byte[] protectedBytes = this.ReadBytesFromFile(file);
// Decrypt the protected bytes by using the Unprotect method.
byte[] bytes = ProtectedData.Unprotect(protectedBytes, null);
// Convert the data from byte to string and display it in the text box.
items.Add(new ItemView { LineOne = file, LineTwo = Encoding.UTF8.GetString(bytes, 0, bytes.Length) });
}
}
//Show all the data...
MessageBox.Show(string.Join(",", items.Select(i => i.LineTwo)));
}
private void WriteToFile(byte[] bytes, string fileName)
{
// Create a file in the application's isolated storage.
using (var file = IsolatedStorageFile.GetUserStoreForApplication())
{
using (var writestream = new IsolatedStorageFileStream(string.Format(FilePath, fileName), System.IO.FileMode.Create, System.IO.FileAccess.Write, file))
{
// Write data to the file.
using (var writer = new StreamWriter(writestream).BaseStream)
{
writer.Write(bytes, 0, bytes.Length);
}
}
}
}
private byte[] ReadBytesFromFile(string filePath)
{
// Access the file in the application's isolated storage.
using (var file = IsolatedStorageFile.GetUserStoreForApplication())
{
using (var readstream = new IsolatedStorageFileStream(filePath, System.IO.FileMode.Open, FileAccess.Read, file))
{
// Read the data in the file.
using (var reader = new StreamReader(readstream).BaseStream)
{
var ProtectedPinByte = new byte[reader.Length];
reader.Read(ProtectedPinByte, 0, ProtectedPinByte.Length);
return ProtectedPinByte;
}
}
}
}
}
public class ItemView
{
public string LineOne { get; set; }
public string LineTwo { get; set; }
}