小编use*_*ame的帖子

当应用程序作为服务运行时,AcceptSecurityContext失败

我有一个简单的HTTP服务器,使用Negotiate协议对客户端进行身份验证.它使用SSPI调用来获取服务器凭据并建立安全上下文.服务器位于域中并代表域用户运行.一切正常,如果我在控制台模式下启动服务器,我将收到HTTP 200响应.但是,当我将其作为服务运行时,我收到SEC_E_INVALID_HANDLE错误.以下是在控制台模式下启动时发生的情况:

1.Client发送HTTP Get请求http:// localhost:8082

2.Server响应WWW-Authenticate:Negotiate header.

3.Client发送Authorization标头并包含以下数据:

60 73 06 06 2B 06 01 05 05 02 A0 69 30 67 A0 30  `s..+..... i0g 0
30 2E 06 0A 2B 06 01 04 01 82 37 02 02 0A 06 09  0...+....7.....
2A 86 48 82 F7 12 01 02 02 06 09 2A 86 48 86 F7  *H÷......*H÷
12 01 02 02 06 0A 2B 06 01 04 01 82 37 02 02 1E  ......+....7...
A2 …
Run Code Online (Sandbox Code Playgroud)

c# security ntlm sspi windows-authentication

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

Bouncy Castle ECDSA 从私钥创建公钥

我正在尝试用 C# 签署比特币交易。我有 2 位代码正在尝试完成。我可以使用 Bouncy castle 创建一组私钥和公钥。我可以将其转换为钱包导入格式。

我还可以从 ECDSA 公钥生成比特币地址。

但是,我想签署一笔交易,而我拥有的只是我的私钥。我不想导入钱包并签名。那么,在仅给出私钥的情况下,如何生成公钥呢?

我发现了一个 javascript 方法可以做到这一点:

ecparams.getG().multiply(this.priv).getEncoded();
Run Code Online (Sandbox Code Playgroud)

我在 Bouncy Castle 中看到的唯一方法是生成随机对。

private static AsymmetricCipherKeyPair GenerateKeys(int keySize)
{
  ECKeyPairGenerator gen = new ECKeyPairGenerator();
  SecureRandom secureRandom = new SecureRandom();
  KeyGenerationParameters keyGenParam = new KeyGenerationParameters(secureRandom, keySize);
  gen.Init(keyGenParam);
  return gen.GenerateKeyPair();
}
Run Code Online (Sandbox Code Playgroud)

c# bouncycastle bitcoin ecdsa

5
推荐指数
1
解决办法
9619
查看次数

处理Icon和Bitmap有区别吗?

我在我的应用程序中调试资源泄漏并创建了一个测试应用程序来测试GDI对象泄漏.在OnPaint中,我创建了新图标和新位图而不进行处理.之后,我检查每个案例中任务管理器中GDi对象的增加.但是,如果我不断重新绘制应用程序的主窗口,则图标的GDI对象数量会增加,但位图没有变化.是否有任何特殊原因导致图标不像位图一样被清理?

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);

        // 1. icon increases number of GDI objects used by this app during repaint.
        //var icon = Resources.TestIcon;
        //e.Graphics.DrawIcon(icon, 0, 0);

        // 2. bitmap doesn't seem to have any impact (only 1 GDI object)
        //var image = Resources.TestImage;
        //e.Graphics.DrawImage(image, 0, 0);
    }
}
Run Code Online (Sandbox Code Playgroud)

测试结果:

  1. 没有图标和位图 - 30个GDI对象
  2. 使用位图 - 31 GDI对象,数字不会改变.
  3. 使用图标 - 31然后,如果重新绘制窗口,则数字会增加.

c# gdi resource-leak winforms

5
推荐指数
1
解决办法
457
查看次数

如果命名空间也被定义为默认值,则强制XDocument不使用命名空间前缀

我有一个xml文件,默认命名空间使用和不使用名称空间前缀.当我生成xml输出时,我得到所有xml元素前缀.有没有办法摆脱前缀,因为我使用默认命名空间?

class Program
{
    static void Main(string[] args)
    {
        var xml =
            "<root xmlns='default-namespace' xmlns:key='default-namespace'>" +
            "  <node1></node1>" +
            "  <node2></node2>" +
            "</root>";
        var document = XDocument.Parse(xml);
        var output = document.ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

<key:root xmlns="default-namespace" xmlns:key="default-namespace">
  <key:node1></key:node1>
  <key:node2></key:node2>
</key:root>
Run Code Online (Sandbox Code Playgroud)

我期待的是:

<root xmlns="default-namespace" xmlns:key="default-namespace">
  <node1></node1>
  <node2></node2>
</root>
Run Code Online (Sandbox Code Playgroud)

不幸的是,我无法删除重复的名称空间声明.我正在使用的实际xml文件是由另一方提供的,我需要做尽可能少的修改.

c# xml namespaces linq-to-xml

5
推荐指数
1
解决办法
418
查看次数

如何检查字符串是否(非常大)?

我需要为指定的字符串进行数字验证.问题是,字符串可能是一个很大的数字,比C#中的任何数字类型都要,所以我不能使用TryParse函数,因为它们只会提供有关它们是否可以转换为这些类型的信息.

它应该考虑 - /+,分隔符和当前文化设置.

我找到了一些使用正则表达式的解决方案,但他们都错过了一些细节.而且我不擅长正则表达式

c# string validation numbers

4
推荐指数
1
解决办法
246
查看次数

从cmd运行时控制台和winforms应用程序之间的区别

我有一个winforms应用程序,有时从命令行使用.这是代码(当然简化):

[STAThread]
static void Main()
{
    AttachConsole(ATTACH_PARENT_PROCESS);
    Console.WriteLine("Hello");

    /*Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());*/
}
Run Code Online (Sandbox Code Playgroud)

如果那是一个控制台应用程序,输出可能是:

C:\ConsoleApplication\ConsoleApplication.exe
Hello
C:\ConsoleApplication\_
Run Code Online (Sandbox Code Playgroud)

在Windows应用程序的情况下,它实际上:

C:\WindowsApplication\WindowsApplication.exe
C:\WindowsApplication\Hello
_
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我为什么我们有这样的差异,是否有可能使我的Windows应用程序在从cmd运行时表现得像控制台?

编辑:

我希望我的Windows应用程序在从cmd运行时表现得像控制台:

C:\WindowsApplication\WindowsApplication.exe
Hello
C:\WindowsApplication\_
Run Code Online (Sandbox Code Playgroud)

解:

结果我正在运行我的应用程序

C:\WindowsApplication\start /wait WindowsApplication.exe
Run Code Online (Sandbox Code Playgroud)

c# cmd winforms

4
推荐指数
1
解决办法
2258
查看次数

选择并编辑新添加行中的第一个 DataGrid 单元格

我有一个带有“CanUserAddRows=False”的数据网格,我想在单击按钮时添加一个新行并开始编辑它。这是 xaml:

<Window x:Class="TestDataGrid2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:TestDataGrid2"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Button Content="Add Item" HorizontalAlignment="Left" Click="Button_Click"/>
        <DataGrid ItemsSource="{Binding Items}" Grid.Row="1" Name="MyGrid" AutoGenerateColumns="False" CanUserAddRows="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Value" Binding="{Binding Value}"/>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

这是背后的代码:

using System.Windows;
using System.Windows.Controls;

namespace TestDataGrid2
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            DataContext = new MainViewModel();
        }

        private void Button_Click(object sender, RoutedEventArgs e) …
Run Code Online (Sandbox Code Playgroud)

c# wpf datagrid

4
推荐指数
1
解决办法
1550
查看次数

如何将转义双引号传递给批处理文件

我知道有类似的问题,但有一件事我在答案中找不到.我正在尝试将以下字符串传递给批处理文件:

hello " world
Run Code Online (Sandbox Code Playgroud)

这只是一个论点.这是我的批处理文件:

@echo off
@echo %1
Run Code Online (Sandbox Code Playgroud)

现在如果我从命令行运行它,我得到以下结果:

>C:\file.bat "hello "" world"
"hello "" world"

>C:\file.bat "hello \" world"
"hello \"

>C:\file.bat "hello """ world"
"hello """
Run Code Online (Sandbox Code Playgroud)

在所有情况下,我得到了错误的结果,如何逃避双引号并正确传递?或者我应该在批处理文件本身中执行任何其他转换步骤?

windows batch-file

3
推荐指数
1
解决办法
2542
查看次数

如何创建将管理其数据库用户的数据库管理员

我正在使用MongoDB ver2.6.2并且想要创建一个能够管理其用户的数据库管理员(添加和删除它们).我有两个数据库 - 管理员和书籍.用户admin_books应该是dbOwner,并且能够从books数据库创建和删除用户:

/* creating admin db */
> use admin;
switched to db admin
> db.createUser( { "user" : "admin_root", "pwd": "pass", "roles" : ["root"] } )
Successfully added user: { "user" : "admin_root", "roles" : [ "root" ] }

/* creating books db */
> use books;
switched to db books
> db.createUser( { "user" : "admin_books", "pwd": "pass", "roles" : ["dbOwner"] } )
Successfully added user: { "user" : "admin_books", "roles" : [ "dbOwner" ] } …
Run Code Online (Sandbox Code Playgroud)

administrator user-management mongodb

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