Tag: C#的

Microsoft Crypto API禁用使用RSAES-OAEP密钥传输algorithm

我正在使用CryptEncryptMessage来生成一个PKCS#7封装的消息。 我使用szOID_NIST_AES256_CBC作为encryptionalgorithm。 生成的消息似乎是有效的,但密钥传输algorithm的RSAES-OAEP在野外的支持有限(Thunderbird,OpenSSL SMIME模块之间的许多人不支持它)。 我想让CAPI恢复到旧的RSAencryptionencryption密钥传输。 有没有办法做到这一点,我可以恢复到低级消息传递函数,如果有一种方法,而不是使用CryptEncryptMessage但我找不到一种方法,即使使用低级别的function。 码: CRYPT_ENCRYPT_MESSAGE_PARA EncryptMessageParams; EncryptMessageParams.cbSize = sizeof(CMSG_ENVELOPED_ENCODE_INFO); EncryptMessageParams.dwMsgEncodingType = PKCS_7_ASN_ENCODING; EncryptMessageParams.ContentEncryptionAlgorithm.pszObjId = szOID_NIST_AES256_CBC; EncryptMessageParams.ContentEncryptionAlgorithm.Parameters.cbData = 0; EncryptMessageParams.ContentEncryptionAlgorithm.Parameters.pbData = 0; EncryptMessageParams.hCryptProv = NULL; EncryptMessageParams.pvEncryptionAuxInfo = NULL; EncryptMessageParams.dwFlags = 0; EncryptMessageParams.dwInnerContentType = 0; BYTE pbEncryptedBlob[640000]; DWORD pcbEncryptedBlob = 640000; BOOL retval = CryptEncryptMessage(&EncryptMessageParams, cRecipientCert, pRecipCertContextArray, pbMsgText, dwMsgTextSize, pbEncryptedBlob, &pcbEncryptedBlob);

MVC和Umbraco整合

我遵循http://memoryleak.me.uk/2009/04/umbraco-and-aspnet-mvc.html中的步骤以及在Umbraco中整合的MVC,但是我仍然有一个对我来说很重要的问题。 有没有办法在MVC视图中inheritanceUmbraco定义的模板? 据我所知问题是,Umbraco模板只能在运行时变成HTML,doctype属性( @nodeName )不能识别,因此引发“Object null reference”exception。 谢谢!

与g ++编译的奇怪代码

下面的代码用g ++ 4.8.1编译成功: int main() { int(*)(); } 它看起来像一个函数指针的简单声明: int(*f)(); 它不能用clang 3.4和vc ++ 2013进行编译。 这是一个编译器错误还是标准的一个黑暗的地方? 用g ++编译的类似奇怪代码片断列表4.8.1(已更新): int(*)(); int(*); int(*){}; int(*()); 这些奇怪的代码片段的生动的例子 。 更新1: @Ali在评论中增加了一些有趣的信息: 所有4种情况都给出了一个编译错误,使用3.5中继(202594),并使用gcc 4.9中继(20140302)进行编译。 行为与-std=c++98 -pedantic ,除了int(*){}; 这是可以理解的; 扩展的初始化程序列表仅在-std=c++11可用-std=c++11 。 更新2:由于@CantChooseUsernames在他的答案中指出,即使在初始化时它们仍然可以很好地编译,而且即使没有任何启用的优化,g ++也不会为它们生成汇编(既不带有也不带有初始化) int(*)() = 0; int(*) = 0; int(*){} = 0; int(*()) = 0; 现场示例初始化 。 更新3:我真的很惊讶,发现int(*)() = "Hello, world!"; 编译也很好(而int(*p)() = […]

C中的“”(星号修饰符)是什么意思?

在试图实现一个C11parsing器(为了教育目的)时,我发现在C11(470页),但也在C99(412页) (感谢Johannes!), 直接声明符被定义为: (6.7.6) direct-declarator: direct-declarator [ type-qualifier-list? * ] 起初,我认为这是语法错误(types列表不应该是可选的)。 但是,当我在我的参考编译器(铿锵声)中尝试了这一点,我得到了一个意想不到的错误: int array[*] = { 1, 2, 3 }; // error: star modifier used outside of function prototype 很明显,(在叮当中)这叫做星形修饰符 。 我很快就了解到,他们只能用于function签名: void foobar(int array[*]) 但是,他们只能用在声明中。 试图在函数定义中使用它也会导致错误: void foobar(int array[*]) { // variable length array must be bound in function definition } 所以据我所知,预期的行为是在函数声明中使用[*] ,然后在函数定义中使用一个固定的数字。 // […]

> vs.> =导致显着的性能差异

我只是偶然发现了一些事情。 起初我以为这可能是一个分支预测错误的例子 ,但是我无法解释为什么分支错误预测会导致这种现象。 我实现了两个版本的Bubble Sort Java,并进行了一些性能testing: import java.util.Random; public class BubbleSortAnnomaly { public static void main(String… args) { final int ARRAY_SIZE = Integer.parseInt(args[0]); final int LIMIT = Integer.parseInt(args[1]); final int RUNS = Integer.parseInt(args[2]); int[] a = new int[ARRAY_SIZE]; int[] b = new int[ARRAY_SIZE]; Random r = new Random(); for (int run = 0; RUNS > […]

什么是Visual Studio中的安全性开发生命周期检查选项?

我正在使用Visual Studio 2013 Preview,但我确定我已经在早期版本中看到过它。 使用向导创build新项目时,我selectC ++,Win32控制台应用程序,并且有一个选项可以在我的项目上启用安全开发生命周期检查。 有人可以解释到底这个选项对我的代码/项目有什么作用吗?

为什么将一个未使用的函数参数值转换为void?

在一些C项目中,我看到了这样的代码: static void *l_alloc (void *ud, void *ptr, size_t osize, size_t nsize) { (void)ud; (void)osize; /* some code not using `ud` or `osize` */ return ptr; } 这两个表决无效用于任何目的?

C#中损坏的string

我碰到“CorruptedString”(解决scheme) 。 以下是本书的程序代码: var s = "Hello"; string.Intern(s); unsafe { fixed (char* c = s) for (int i = 0; i < s.Length; i++) c[i] = 'a'; } Console.WriteLine("Hello"); // Displays: "aaaaa" 为什么这个程序显示“aaaaa”? 我理解这个程序如下: CLR在实习生池中保留“hello”(我将实习生池形象为一组string)。 string.Intern(s)实际上什么都不做,因为CLR保留了“Hello”string – 它只是返回保留的“Hello”string的地址(对象s具有相同的地址) 该程序通过指针更改“Hello”string的内容 ??? Hellostring应该在实习生池中不存在,应该是错误的! 但是没关系; 该程序运行成功。 据我了解实习生池,它就像某种string的字典串。 或者我错过了什么?

如何构build和使用Google TensorFlow C ++ api

我真的很想开始在C ++中使用Google的新Tensorflow库。 网站和文档只是不清楚如何build立项目的C + + API,我不知道从哪里开始。 有更多经验的人可以通过发现和共享使用tensorflow的C ++ API的指导来帮助吗?

为什么在.NET内部的Hashtable中有一个Thread.Sleep(1)?

最近我正在读.NET Hashtable的实现,遇到了一些我不明白的代码。 部分代码是: int num3 = 0; int num4; do { num4 = this.version; bucket = bucketArray[index]; if (++num3 % 8 == 0) Thread.Sleep(1); } while (this.isWriterInProgress || num4 != this.version); 整个代码在System.Collections.Hashtable (mscorlib版本= 4.0.0.0)的public virtual object this[object key]的public virtual object this[object key] 。 问题是: 在那里有Thread.Sleep(1)的原因是什么?