在使用对称加密算法(在本例中为AES)加密和解密数据时,我试图理解如何处理和管理启动向量和盐(适用时).
我从不同的SO线程和各种其他网站推断出,IV或盐都不需要保密,只是为了防御密码分析攻击,例如蛮力攻击.考虑到这一点,我认为将伪随机IV与加密数据一起存储是可行的.我问的是我使用的方法是否合适,而且,我是否应该以同样的方式处理我目前的硬编码盐?那就是将它写在IV旁边的内存流中
我的代码:
private const ushort ITERATIONS = 300;
private static readonly byte[] SALT = new byte[] { 0x26, 0xdc, 0xff, 0x00, 0xad, 0xed, 0x7a, 0xee, 0xc5, 0xfe, 0x07, 0xaf, 0x4d, 0x08, 0x22, 0x3c };
private static byte[] CreateKey(string password, int keySize)
{
DeriveBytes derivedKey = new Rfc2898DeriveBytes(password, SALT, ITERATIONS);
return derivedKey.GetBytes(keySize >> 3);
}
public static byte[] Encrypt(byte[] data, string password)
{
byte[] encryptedData = null;
using (AesCryptoServiceProvider provider = new AesCryptoServiceProvider())
{
provider.GenerateIV();
provider.Key = CreateKey(password, provider.KeySize);
provider.Mode …Run Code Online (Sandbox Code Playgroud) 我有一个视图模型,只封装了一些数据库模型属性.视图模型包含的这些属性是我想要更新的唯一属性.我希望其他属性保留其价值.
在我的研究过程中,我发现这个 答案看起来很适合我的需求,但是,尽管我付出了最大的努力,但我无法让代码按预期工作.
这是我想出的一个孤立的例子:
static void Main() {
// Person with ID 1 already exists in database.
// 1. Update the Age and Name.
Person person = new Person();
person.Id = 1;
person.Age = 18;
person.Name = "Alex";
// 2. Do not update the NI. I want to preserve that value.
// person.NINumber = "123456";
Update(person);
}
static void Update(Person updatedPerson) {
var context = new PersonContext();
context.Persons.Attach(updatedPerson);
var entry = context.Entry(updatedPerson);
entry.Property(e => e.Name).IsModified = true; …Run Code Online (Sandbox Code Playgroud) 使用C#代码提供程序和 ICodeCompiler.CompileAssemblyFromSource方法,我试图编译代码文件,以生成可执行程序集.
我想编译的代码使用了可选参数和扩展方法等功能,这些功能仅在使用C#4语言时才可用.
话虽如此,我想编译的代码只需要(并且需要)以.NET Framework 2.0版为目标.
使用前面的代码可以避免任何与语法有关的编译时错误,但是,生成的程序集将以框架的4.0版为目标,这是不合需要的.
var compiler = new CSharpCodeProvider(
new Dictionary<string, string> { { "CompilerVersion", "v4.0" } } );
Run Code Online (Sandbox Code Playgroud)
我怎样才能使代码提供程序针对语言版本4.0但生成一个只需要框架版本2.0的程序集?
根据现有的答案,我设法将裁剪图像居中.但是,我无法使中心裁剪的图像响应.
题
当我减小Web浏览器窗口的大小时,中心裁剪的图像不能很好地缩小.相反,它维护它是固定的height,width并溢出视图端口.小提琴可能会更清楚地表明这个问题.
如何才能使中心裁剪图像缩小?理想情况下,中心裁剪后的图像会在裁剪时保持良好的缩小,并保持相似的纵横比.
.centered-container {
max-width: 960px;
margin: auto;
}
.center-cropped-img {
width: 640px;
height: 360px;
overflow: hidden;
margin: 10px auto;
border: 1px red solid;
position: relative;
}
.center-cropped-img img {
position: absolute;
left: -100%;
right: -100%;
top: -100%;
bottom: -100%;
margin: auto;
min-height: 100%;
min-width: 100%;
}Run Code Online (Sandbox Code Playgroud)
<div class="centered-container">
<div class="center-cropped-img">
<img src="http://i.imgur.com/Ag2ZCgz.png" alt="" />
</div>
<div class="center-cropped-img">
<img src="http://i.imgur.com/BQUgmlB.png" alt="" />
</div>
</div>Run Code Online (Sandbox Code Playgroud)
同样,这里是一个小提琴,或许可以比散文更好地展示问题.
我的客户端应用程序的单个实例将与远程服务器建立两个传出TCP连接 - 主连接和文件传输连接.
当客户端应用程序被强行关闭时 - 有时服务器不会确认两个套接字连接都已被删除.
服务器将检测到两个连接都已被丢弃,或者只检测到主连接已被丢弃,这是不合需要的.
了解问题仅发生在多台测试机器中的一台上,并且当客户机被强制关闭时,文件传输连接正在主动传输数据.
分析了网络流量 - 我了解到操作系统实际上是在确认两个RST标志!因此,我倾向于认为问题在于服务器代码.
使用该Socket.BeginReceive方法,主要负责检测断开连接的回调如下所示:
private void ReadCallback(IAsyncResult asyncResult)
{
try
{
int bytesTransferred = _clientSocket.EndReceive(asyncResult);
_logger.Debug(GetHashCode() + " Received " + bytesTransferred + " bytes from " + RemoteEndPoint);
if (bytesTransferred > 0)
{
_clientSocket.BeginReceive(_readMessageBuffer, ReadCallback);
_logger.Debug(GetHashCode() + " Issued asynchronous read for " + RemoteEndPoint);
}
else
{
_logger.Debug(GetHashCode() + " Client disconnected. Received zero bytes. "); …Run Code Online (Sandbox Code Playgroud) public ActionResult Logout()
{
FormsAuthentication.SignOut();
return RedirectToRoute("Home");
}
Run Code Online (Sandbox Code Playgroud)
我希望此操作可以将用户重定向到主页,但会发生重定向循环(根据Chrome).
上述操作属于"admin"区域中的控制器,因为默认区域定义了"Home"路由 - 我怀疑这是相关的.
以下是衡量标准的途径:
routes.MapRoute(
"Home",
"{controller}/{action}/{slug}",
new { controller = "Posts", action = "Index", slug = UrlParameter.Optional },
new[] { "GoBlog.Controllers" }
);
Run Code Online (Sandbox Code Playgroud)
更新
return用以下内容替换该语句将导致操作按预期工作:
return RedirectToRoute("Home", (RouteTable.Routes["Home"] as Route).Defaults);
Run Code Online (Sandbox Code Playgroud)
我想知道为什么会这样.理想情况下,我可以省略(繁琐的)第二个参数.
我正在做一个项目,我即将做一些实验性的事情.
但是我还没准备好提交.
是否有可能制作一个我可以恢复的检查点?在这种情况下,Git stash似乎不合适,因为我想在同一个分支上工作.
使用前面的代码,我成功地设法生成了一组数字并将元素在数组中的位置洗牌:
var randomNumbers = Enumerable.Range(0, 100)
.OrderBy(x => Guid.NewGuid());
Run Code Online (Sandbox Code Playgroud)
一切都运行良好,但在尝试理解时,它在我的作品中被抛出了一种扳手Enumerable.OrderBy.以下面的代码为例:
var pupils = new[]
{
new Person() { Name = "Alex", Age = 17 },
new Person() { Name = "Jack", Age = 21 }
};
var query = pupils.OrderBy(x => x.Age);
Run Code Online (Sandbox Code Playgroud)
我的理解是,我传递了我希望排序的属性,并且我假设Comparer<T>.Default如果没有IComparer为第二个重载指定显式,LINQ将用于确定如何对集合进行排序.我真的没有看到如何应用这种合理的逻辑来以这种方式改组数组.那么LINQ如何让我像这样洗牌呢?
我正在尝试将远程计算机桌面的实时源流式传输到我的应用程序.为此,我使用面向连接的(TCP)套接字,捕获客户端计算机的帧并将其发送到服务器.
我每隔100毫秒(即10 FPS)发送一个帧(屏幕截图).每帧大约145kb,这意味着我需要每秒发送1450kb(相当于1.4兆字节,每秒11兆位).
我的互联网最高下载速度为每秒0.32兆位.因为我需要每秒发送11兆位数据,这意味着我的互联网速度比我需要的慢10.6兆.因此,通过我的计算,为了有效地流式传输桌面,我需要每帧大约4.5kb(4608b + 20b TCP头),这在现实系统中是现实的,不可能,即使只发送桌面的更新部分和压缩位图.
我不确定系统是否完全受上传速度的限制.我认为这是因为4.5kb是一个非常小的尺寸.我可以使用类似的软件(Teamviewer,Join.me和Skype等软件)顺利地流式传输我的桌面,即使这些软件包使用的智能协议远远超过我(这里的好问题)我非常怀疑它们只发送了4.5kb每个帧/桌面更新.
所以我的问题最终是; 我的计算是否准确,为什么?我的目标是确定每个帧的适当大小,以便我可以努力达到该大小并计算不同速度连接的质量/间隔.我对任何对我的情况有帮助的评论/答案感兴趣,但我接受的答案将是回答我实际问题的答案.
笔者提供了一个例子说明如何使用MediatR使用Autofac一个控制台应用程序:
var builder = new ContainerBuilder();
builder.RegisterSource(new ContravariantRegistrationSource());
builder.RegisterAssemblyTypes(typeof (IMediator).Assembly).AsImplementedInterfaces();
builder.RegisterAssemblyTypes(typeof (Ping).Assembly).AsImplementedInterfaces();
builder.RegisterInstance(Console.Out).As<TextWriter>();
var lazy = new Lazy<IServiceLocator>(() => new AutofacServiceLocator(builder.Build()));
var serviceLocatorProvider = new ServiceLocatorProvider(() => lazy.Value);
builder.RegisterInstance(serviceLocatorProvider);
Run Code Online (Sandbox Code Playgroud)
我拿了这个例子并尝试使用ASP MVC 5和Autofac.Mvc5包:
var builder = new ContainerBuilder();
builder.RegisterSource(new ContravariantRegistrationSource());
builder.RegisterAssemblyTypes(typeof(IMediator).Assembly).AsImplementedInterfaces();
builder.RegisterAssemblyTypes(typeof(AddPostCommand).Assembly).AsImplementedInterfaces();
builder.RegisterControllers(typeof(HomeController).Assembly);
var container = builder.Build();
var lazy = new Lazy<IServiceLocator>(() => new AutofacServiceLocator(container));
var serviceLocatorProvider = new ServiceLocatorProvider(() => lazy.Value);
builder.RegisterInstance(serviceLocatorProvider);
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
Run Code Online (Sandbox Code Playgroud)
当我运行Web应用程序时,我得到一个错误页面,告诉我ServiceLocationProvider依赖项尚未注册.我究竟做错了什么?
我怀疑这个问题是由于我在调用 …
c# ×8
asp.net-mvc ×2
networking ×2
tcp ×2
.net ×1
autofac ×1
codedom ×1
cryptography ×1
csc ×1
css ×1
encryption ×1
git ×1
html ×1
image ×1
linq ×1
mediatr ×1
performance ×1
sockets ×1