小编Cas*_*roy的帖子

对称加密(AES):保存IV和Salt以及加密数据是否安全且正确?

在使用对称加密算法(在本例中为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)

c# encryption cryptography encryption-symmetric

22
推荐指数
2
解决办法
1万
查看次数

实体框架6.1更新记录的子集

我有一个视图模型,只封装了一些数据库模型属性.视图模型包含的这些属性是我想要更新的唯一属性.我希望其他属性保留其价值.

在我的研究过程中,我发现这个 答案看起来很适合我的需求,但是,尽管我付出了最大的努力,但我无法让代码按预期工作.

这是我想出的一个孤立的例子:

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# entity-framework entity-framework-6.1

15
推荐指数
1
解决办法
1万
查看次数

如何使用CodeDOM定位特定语言版本?

使用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的程序集?

.net c# codedom csc

14
推荐指数
1
解决办法
1572
查看次数

如何使中心裁剪图像响应?

根据现有的答案,我设法将裁剪图像居中.但是,我无法使中心裁剪的图像响应.

当我减小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)

同样,这里是一个小提琴,或许可以比散文更好地展示问题.

html css image responsive-design

10
推荐指数
1
解决办法
2875
查看次数

当TCP客户端被强制关闭时,服务器无法识别断开连接

介绍

我的客户端应用程序的单个实例将与远程服务器建立两个传出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)

c# sockets networking tcp

9
推荐指数
1
解决办法
2672
查看次数

RedirectToRoute导致重定向循环

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)

我想知道为什么会这样.理想情况下,我可以省略(繁琐的)第二个参数.

c# asp.net-mvc asp.net-mvc-4 asp.net-mvc-5

8
推荐指数
1
解决办法
1504
查看次数

如何制作临时检查点(不是提交)?

我正在做一个项目,我即将做一些实验性的事情.

但是我还没准备好提交.

是否有可能制作一个我可以恢复的检查点?在这种情况下,Git stash似乎不合适,因为我想在同一个分支上工作.

git

8
推荐指数
1
解决办法
3362
查看次数

Enumerable.Order如何使用keySelector

使用前面的代码,我成功地设法生成了一组数字并将元素在数组中的位置洗牌:

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如何让我像这样洗牌呢?

c# linq

6
推荐指数
1
解决办法
5688
查看次数

TCP客户端的最大发送速度是否完全由客户端计算机的上载速度限制

背景

我正在尝试将远程计算机桌面的实时源流式传输到我的应用程序.为此,我使用面向连接的(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每个帧/桌面更新.

所以我的问题最终是; 我的计算是否准确,为什么?我的目标是确定每个帧的适当大小,以便我可以努力达到该大小并计算不同速度连接的质量/间隔.我对任何对我的情况有帮助的评论/答案感兴趣,但我接受的答案将是回答我实际问题的答案.

c# performance networking tcp

6
推荐指数
1
解决办法
1087
查看次数

如何在ASP MVC 5中使用MediatR和Autofac?

笔者提供了一个例子说明如何使用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# asp.net-mvc dependency-injection autofac mediatr

6
推荐指数
1
解决办法
3363
查看次数