使用Amazons S3,CryptoStream.FlushFinalBlock需要很长时间

时间:2013-12-30 11:12:29

标签: encryption amazon-s3 powershell-v3.0

当我将加密流上传到Amazons S3时,一切正常,直到我尝试关闭cryptuffream(调用刷新最终块方法)。刷新需要很长时间,并导致许多额外的网络流量,我无法解释。这有什么不对?不应该只是刷新最后的字节? 最终结果还可以,以后可以下载文件&解密没有问题。

"Encrypting:"
$myAES = [System.Security.Cryptography.aes]::Create()

$FileStreamWriter = (New-Object Amazon.S3.IO.S3FileInfo($S3Client, $BucketName, $key)).OpenWrite()
$FileStreamReader = New-Object System.IO.FileStream(($SourceFile), [System.IO.FileMode]::Open)    
$CryptoStream  = New-Object System.Security.Cryptography.CryptoStream($FileStreamWriter, $myAES.CreateEncryptor(), [System.Security.Cryptography.CryptoStreamMode]::Write)

$Data  = New-Object Byte[] 16 #16=AES Blocksize

Do{      
   $NumberOfBytesRead   = $FileStreamReader.Read($Data, 0, $Data.count)
   $CryptoStream.Write($Data, 0, $NumberOfBytesRead) 
}
While ($bytesread -gt 0)

write-host "Closing Streams"
$CryptoStream.Close() #<-Takes ages
$FileStreamReader.Close()
$FileStreamWriter.Close() 

1 个答案:

答案 0 :(得分:0)

Amazon S3需要知道您在上传开始时上传的对象的内容长度。 This博客文章简要提到,一旦关闭流,就会开始上传到S3。我们将更新文档以反映这一点。