我正在尝试在C#中实现warpwallet代码.我正在使用cryptsharp进行scrypt和PBKDF2实现.但是,我似乎得到的结果与真实的网站不同.
这是我的代码:
static void Main(string[] args)
{
string randomString = "mypassword";
byte[] passwordBytes = Encoding.UTF8.GetBytes(randomString);
byte[] passwordBytesScrypt = new byte[passwordBytes.Length + 1];
Array.Copy(passwordBytes, 0, passwordBytesScrypt, 0, passwordBytes.Length);
passwordBytesScrypt[passwordBytes.Length] = 0x1;
string salt = "salt@gmail.com";
byte[] saltBytes = Encoding.UTF8.GetBytes(salt);
byte[] saltBytesScrypt = new byte[saltBytes.Length + 1];
Array.Copy(saltBytes, 0, saltBytesScrypt, 0, saltBytes.Length);
saltBytesScrypt[saltBytes.Length] = 0x1;
byte[] scryptBytes = CryptSharp.Utility.SCrypt.ComputeDerivedKey(passwordBytesScrypt, saltBytes, 524288, 8, 1, null, 32);
byte[] passwordBytesPBKDF2 = passwordBytesScrypt;
passwordBytesPBKDF2[passwordBytes.Length] = 0x2;
byte[] saltBytesPBKDF2 = saltBytesScrypt;
saltBytesScrypt[saltBytes.Length] = 0x2;
byte[] …Run Code Online (Sandbox Code Playgroud) 我已经将一个流下载为一个大约36MB的byte []'raw'.然后我将其转换为字符串
string temp = System.Text.Encoding.UTF8.GetString(raw)
Run Code Online (Sandbox Code Playgroud)
然后我需要用"\ r \n"替换所有"\n",所以我尝试了
string temp2 = temp.Replace("\n","\r\n")
Run Code Online (Sandbox Code Playgroud)
但它抛出了"内存不足"的例外.然后我尝试使用StringBuilder创建一个新字符串:
string temp2 = new StringBuilder(temp).Replace("\n","\r\n").toString()
Run Code Online (Sandbox Code Playgroud)
并没有抛出异常.为什么首先会出现内存问题(我这里只处理36MB),还有为什么StringBuilder.Replace()在另一个没有的情况下工作?
由于您需要在创建时输入数组的长度,我认为它需要一个可靠,连续的内存块.List可以动态扩展,这是否意味着它不需要连续的内存分配?这是否意味着List不太可能抛出"Out of Memory"异常?
我有一堆非常大的视频文件(.ts),范围从3GB到10GB.其中很多都有一个特定的错误,我的解决方案是简单地删除包含错误的部分.我认识的开始和结束偏移,因为我想保留的部分,我希望从start_offset在主文件中简单地读取并复制到end_offset到在同一个文件夹中的新文件.
例如,我有主视频MAIN.ts,它是5.5GB.假设它有两个错误.我想保留偏移量(十进制,而不是十六进制)0到1174698823(错误开始前的字节)并将其保存到新文件PART1.ts.然后我想通过偏移4126897791(第二个错误开始)保留偏移1257553244(错误结束后的字节)并保存为PART2.ts.然后我需要将文件末尾的偏移量4207333028保存为PART3.ts.基本上我只删除了大约155MB的文件并将其分成三部分.如果我能真正做到削减,而不创建多个新文件,而是把它们添加对方为我去,然后写整个新的文件,这将是一个奖金(或我可以只使用copy /b更高版本).
我一直在研究文件流和字节数组,我知道2GB的限制.我如何解决这个问题,然后如果我想要保留的块的长度大于2GB,我该如何编写它?我不确定如何使用有限长度的缓冲区来执行此操作.如果可能的话,我也希望有一个进度条来显示已经写了多少.
任何帮助,将不胜感激.