我需要byte[]
在a中使用a 作为键Dictionary
.由于byte[]
不会覆盖默认GetHashCode
方法,byte[]
因此包含相同数据的两个单独对象将在字典中使用两个单独的插槽.基本上我想要的是这个:
Dictionary<byte[], string> dict = new Dictionary<byte[], string>();
dict[new byte[] {1,2,3}] = "my string";
string str = dict[new byte[] {1,2,3}];
// I'd like str to be set to "my string" at this point
Run Code Online (Sandbox Code Playgroud)
有一个简单的方法吗?我唯一能想到的就是构建一个包装类,它只包含一个基于内容的byte[]
覆盖,但这似乎容易出错.GetHashCode
byte[]
我正在尝试在C#应用程序中使用HttpListener类来让迷你Web服务器通过SSL提供内容.为此,我需要使用httpcfg工具.我有一个带有公钥和私钥对的.pfx文件.如果我使用mmc手动将此密钥对导入本地机器商店,一切正常.但是,如果我使用X509Store类以编程方式导入此密钥对,则无法连接到我的迷你网络服务器.请注意,在这两种方法中,证书都会导入到LocalMachine中的MY商店.奇怪的是,一旦我以编程方式导入它,我就可以在mmc中查看证书,当我查看它时,UI表明私钥也可用于此证书.
深入挖掘,我注意到当我手动导入密钥对时,我可以看到一个新文件出现C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys
,但是当我以编程方式导入时,不会出现一个.在相关的说明中,当我删除手动导入的证书时,它不会从前面提到的目录中删除相应的私钥文件.
最后,我的问题是:当我以编程方式将证书添加到商店时,存储的私钥在哪里以及为什么HttpListener类(HttpApi)无法访问它?
请注意,这个问题略有关联,但我不认为权限是问题,因为这一切都是作为同一个Windows用户完成的: 如何从.NET设置X.509证书的私钥文件的读取权限
我需要Bitmap
使用表示单色位图数据的原始字节来创建对象.在完整的框架中,我正在做以下事情:
Bitmap bmp = new Bitmap(width, height, PixelFormat.Format8bppIndexed)
BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.WriteOnly, bmp.PixelFormat);
// Write my data into bmpData.Scan0
bmp.UnlockBits(bmpData);
Run Code Online (Sandbox Code Playgroud)
不幸的是,Compact Framework没有PixelFormat.Format8bppIndexed
枚举值.那我怎么能在CF上完成这个呢?我唯一能想到的是自己手动创建位图文件头并将其与数据一起写入a Stream
然后Bitmap
用它构造一个对象Stream
.
想法?
如何获取Font
特定设备使用的默认系统字体的对象?我注意到不同的设备有不同的分辨率和DPI,但我的一些控件有明确定义的字体.我希望能够在运行时获取默认的系统字体(好像我从未更改Font
控件上的属性).
我有一个在Compact Framework上运行的.NET 2.0应用程序.它有许多不同的形式,最初设计为在具有特定屏幕分辨率的特定设备上运行.我现在希望让这个应用程序在其他一些具有非常不同的屏幕分辨率的设备上运行(有些具有完全相反的宽高比,其中屏幕现在高于它的宽度).我的问题是如何在其他屏幕上更改我的表单以使其看起来更好?
这与在完整框架上设计表单略有不同,因为我必须设计这些表单以占据整个屏幕,因为屏幕非常小.我曾考虑为每种类型的屏幕方向创建单独的表单(例如MyForm_Wide.cs,MyForm_Tall.cs等).我希望能够重用非设计器生成的代码,该代码包含许多与UI控件绑定的业务逻辑.也许我可以以某种方式使用部分类来实现这一点(例如,MyForm.cs以某种方式被编译成MyForm_Wide.Designer.cs等).我真的想避免每个屏幕方向的特定编译版本.我想到的另一种方法是尝试根据确定的屏幕大小在运行时重新排列一些控件.
你们有什么感想?
我需要写入安装在 Program Files 下的应用程序目录中的一些文件。我知道在 Vista 和 Windows 7 上启用 UAC 后,用户无法修改此目录中的文件。但是,我知道 Vista 中添加的 UAC 虚拟化基本上将写入重定向到virtualstore 目录。在 Vista 中,这效果很好,我的文件实际上写入了这个虚拟存储目录。但是,在 Windows 7 上,我收到访问被拒绝错误,并且我的文件根本没有写入此目录。是什么赋予了?
我的应用程序中有一个使用 SSL 的客户端-服务器架构。目前,私钥存储在 CAPI 的密钥存储位置。出于安全原因,我想将密钥存储在一个更安全的地方,最好是为此目的而构建的硬件签名模块 (HSM)。不幸的是,私钥存储在这样的设备上,我无法弄清楚如何在我的应用程序中使用它。
在服务器上,我只是使用SslStream
类和AuthenticateAsServer(...)
调用。此方法采用一个X509Certificate
已加载其私钥的对象,但由于私钥存储在 HSM 上的安全(例如不可导出)位置,我不知道如何执行此操作。
在客户端,我使用一个HttpWebRequest
对象,然后使用该ClientCertificates
属性添加我的客户端身份验证证书,但我在这里遇到了同样的问题:如何获取私钥?
我知道有一些 HSM 可以充当 SSL 加速器,但我真的不需要加速器。此外,这些产品往往与我没有使用的 Web 服务器(例如 IIS 和 Apache)进行特殊集成。
有任何想法吗?我唯一能想到的就是编写自己的 SSL 库,这样我就可以将交易的签名部分交给 HSM,但这似乎是一项巨大的工作。
c# ×6
.net ×3
ssl ×2
.net-2.0 ×1
bitmap ×1
hsm ×1
system-font ×1
windows-7 ×1
windows-ce ×1
winforms ×1