IT点滴

我不去想是否能够成功 既然选择了远方 便只顾风雨兼程
  博客园  :: 首页  :: 联系 :: 订阅 订阅  :: 管理

03 2014 档案

摘要:很郁闷,又是一个系统语言的问题。NetBeans下载下来之后,怎么装都是个中文版,或者半中文半英文,不伦不类的。上网找了一个圈,很多都讲得不清楚,最后终于有了一个答案:在NetBeans的配置文件 "etc/netbeans.conf" 的netbeans_default_options="..."配置项中加一个值:-J-Duser.language=en注意,一定是要在netbeans_default_options配置项中添加! 阅读全文

posted @ 2014-03-31 09:33 Ady Lee

摘要:看了几篇文章,有了大概的理解,解决如下问题:1、理解事情和委托是怎么来的,为什么要有委托,委托结合事情的魅力所在;2、UI线程中怎么正确调用同步委托或异步委托;Invoke和BeginInvoke的区别是什么;Control.invoke和delegate.invoke有什么区别?事件和委托原理的理解解析:对.net事件的看法 Invoke和BeginInvoke的深入理解和解析:Invoke and BeginInvoke UI线程中的同步和异步调用、怎么调用,多线程中各个方法的执行顺序:Control的Invoke和BeginInvoke 最后我总结了下实际在后台线程更新UI线程控... 阅读全文

posted @ 2014-03-26 16:02 Ady Lee

摘要:RT,在C#中实现,依赖.netFramework2.0BouncyCastle中提供了PKCS12Store,Pkcs12StoreBuilder,AsymmetricKeyEntry,X509CertificateEntry等接口其中Pkcs12StoreBuilder建立一个PKCS12Store对象,PKCS12Store对象来产生一个pfx/p12格式的证书,该证书符合PKCS#12规范PKCS#12的ref,见RSA给出的文档:PKCS #12: Personal Information Exchange Syntax StandardPKCS12Store中方法load()和sa 阅读全文

posted @ 2014-03-26 16:00 Ady Lee

摘要:开源API链接地址:The Legion of the Bouncy Castle Bouncy Castle,简称为BC,原本是java的一个开源JCE提供者,后来也提供了C#版本的API,我下载其编译好的DLL,在C#项目中直接引用,用其几个API,产生我指定位数的公钥和私钥(目前是1024位,但产生CA的密钥时,要2048位才能满足安全需求)。虽然开源很好很强大,但这个API就是文档很缺陷,C#的文档更是少得可怜,没办法,下载源代码慢慢看吧。。。 在接下来的几篇关于CA文章中,大体按下面链接网址的思路去整理,不过整理出来的是C#版本的实现,基本目标架设一个CA,产生用户使用的数字证书。网 阅读全文

posted @ 2014-03-26 15:58 Ady Lee

摘要:在用Bouncy Castle的C#版API产生公钥和私钥 中产生了一对密钥对,可以用bouncy caslte提供的API进行保存 公钥方面的3个类,具体代码根据命名空间自行查看其源代码: Org.BouncyCastle.Asn1.X509 . SubjectPublicKeyInfo Org.BouncyCastle.X509 . SubjectPublicKeyInfoFactory Org.BouncyCastle.Security . PublicKeyFactory 用法: SubjectPublicKeyInfo subInfo = SubjectPublicKeyI... 阅读全文

posted @ 2014-03-26 15:55 Ady Lee

摘要:一个使用bouncycastle进行安全操作的实用类2007-04-13 12:54import java.io.*;import java.security.*;import java.security.interfaces.*;import java.math.*;import java.util.Enumeration;import java.util.Vector;import org.bouncycastle.crypto.AsymmetricBlockCipher;import org.bouncycastle.crypto.encodings.PKCS1Encoding;impo 阅读全文

posted @ 2014-03-26 13:32 Ady Lee

摘要:NET要使用OpenSSL生成的pem密钥文件,网上资料很少(http://www.faqs.org/rfcs/rfc1421.html,RFC1421文件又老长老长),仅有的资料还是有错误的,所以今天干了件体力活,把PEM密钥文件610个字节一个个看过来,终于搞清了它的格式。using System;using System.Text;using System.Security.Cryptography;using System.Web;using System.IO;namespace Thinhunan.Cnblogs.Com.RSAUtility{ public class PemCo 阅读全文

posted @ 2014-03-26 13:31 Ady Lee

摘要:昨天windows8自动更新Microsoft .NET Framework 3.5和4.5.1安全更新程序,今天用VS2010编译时提示如下错误信息TRACKER : error TRK0002: Failed to execute command: ""E:\Program Files (x86)\MicrosoftVisualStudio10\VC\bin\x86_amd64\CL.exe" @C:\Users\kevin\AppData\Local\Temp\tmp0dedf936ff54492b89897ca05be58d38.rsp". Th 阅读全文

posted @ 2014-03-20 16:19 Ady Lee

摘要:1.证书格式PEM 格式PEM格式通常用于数字证书认证机构(Certificate Authorities,CA),扩展名为.pem, .crt, .cer, and .key。内容为Base64编码的ASCII码文件,有类似"-----BEGIN CERTIFICATE-----" 和 "-----END CERTIFICATE-----"的头尾标记。服务器认证证书,中级认证证书和私钥都可以储存为PEM格式(认证证书其实就是公钥)。Apache和类似的服务器使用PEM格式证书。DER 格式DER格式与PEM不同之处在于其使用二进制而不是Base64编码 阅读全文

posted @ 2014-03-20 14:57 Ady Lee

摘要:修改MSDN上的示例,使之可以通过RSA证书文件加密和解密,中间遇到一个小问题。Q:执行ExportParameters()方法时,回报CryptographicException:该项不适于在指定状态下使用(Key not valid for use in specified state)。A:导入带有私钥的证书时,需要使用"X509KeyStorageFlags"参数标记"私钥可导出"。X509Certificate2 prvcrt=newX509Certificate2(@"X:\path\to\CA.pfx","** 阅读全文

posted @ 2014-03-20 14:55 Ady Lee

摘要:在使用OpenSSL进行SSL双向认证时,需要在服务器和客户端配置如下接口函数:[cpp]view plaincopyprint?SSL_CTX_set_verify(SSL_CTX*ctx,intmode,int(*verify_callback)(int,X509_STORE_CTX*));SSL_CTX_load_verify_locations(SSL_CTX*ctx,constchar*CAfile,constchar*CApath);在接口函数SSL_CTX_set_verify中设置第二个参数(mode)为SSL_VERIFY_PEER,该参数标识对通信对方进行认证。如果设置证书 阅读全文

posted @ 2014-03-20 14:05 Ady Lee

摘要:证书库个人证书存储区为其中的每个证书维护一个属性CERT_KEY_PROV_INFO_PROP_ID,该属性指定了证书对应的密钥容器的相关信息,包括密钥容器名,CSP名称,CSP类型,密钥用途,以及CSP的其他一些参数(这些参数信息也可以使用CryptSetProvParam函数来设置)。因为个人证书携带私钥信息,所以在导出p12(pfx)个人证书时,也导出了其对应密钥容器的相关信息(使用CryptGetProvParam函数来获取),即上面所提到的。那么,在导入p12(pfx)个人证书时,也会导入密钥容器的相关信息。首先在对应的CSP中生成一个新的密钥容器,并导入密钥对信息;然后导入证书,并 阅读全文

posted @ 2014-03-20 14:04 Ady Lee

摘要:使用Crypto库签名和验证签名请参考Crypto库实现PKCS7签名与签名验证,可以使用OpenSSL库验证Crypto签名,OpenSSL验证签名可使用简单的代码描述如下:[cpp]view plaincopyprint?//signature_msg为PKCS7签名串[cpp]view plaincopyprint?intOpenssl_Verify(unsignedchar*signature_msg,unsignedintlength){unsignedcharmessage[1024];intmessage_length=0;constunsignedchar*p_signatur 阅读全文

posted @ 2014-03-20 14:03 Ady Lee

摘要:在windows中,可以直接使用微软提供的crypto库实现PKCS7签名与签名验证。签名接口函数为CryptSignMessage,其接口定义为:[cpp]view plaincopyprint?BOOLWINAPICryptSignMessage(__inPCRYPT_SIGN_MESSAGE_PARApSignPara,__inBOOLfDetachedSignature,__inDWORDcToBeSigned,__inconstBYTE*rgpbToBeSigned[],__inDWORDrgcbToBeSigned[],__outBYTE*pbSignedBlob,__in_out 阅读全文

posted @ 2014-03-20 14:02 Ady Lee

摘要:今天在使用Outlook express调试CSP程序时,发现数字证书总是加载不上(提示该数字证书已经被破坏),使用断点进去跟踪一下,发现在CSP程序中调用CPVerifySignature函数时返回80090006错误(不是一个合法的签名),因为这里CPVerifySignature函数是windows提供的SPI接口函数,肯定不会有错,推测是不是传进去的签名值发生了错误,然而这个签名值来自哪里呢?应该是来自上层的Crypto应用(即Outlook express程序),推测在证书验证时会调用哪些函数,在使用CPVerifySignature时,传入了签名值,hash对象句柄,和公钥句柄,. 阅读全文

posted @ 2014-03-20 14:01 Ady Lee

摘要:这段时间要实现一个认证协议,分为客户端和服务器端,客户端使用windows操作系统,服务器端使用linux操作系统,在客户端下(windows),使用windows证书库中的签名证书对消息进行签名(使用windows的crypto库),然后在服务器端(linux)下,使用OpenSSL库对签名值进行验证~~客户端使用函数接口:CertOpenSystemStore — 打开系统证书库CryptUIDlgSelectCertificateFromStore — 从证书库中选择证书,获取证书上下文CertGetCertificateContextProperty — 获取属性CERT_KEY_.. 阅读全文

posted @ 2014-03-20 13:59 Ady Lee 阅读(1184) 评论(0) 推荐(0)

摘要:前一段时间对OpenSSL库中的SSL通讯稍微琢磨了一下,在百度文库中找了个示例程序,然后在机器上跑,哇塞,运行成功!那时那个惊喜啊,SSL蛮简单的嘛。前几天,老板要我整一个SSL通讯,要使用windows证书库中的证书进行双向认证,我就想,那不是一小case嘛,于是没怎么放在心上,先休息两天再说。。昨天开完会后,决定开始整。。一打开原来做的SSL工程,我靠,傻眼了,原来示例程序中使用的都是OpenSSL生成的,例如CA证书,Server端证书,Client端证书,以及各自的密钥文件,我想,这咋办呢,还是把windows证书库中的证书先导出来,然后在程序中使用证书文件吧,但又一想,如果是多.. 阅读全文

posted @ 2014-03-20 13:58 Ady Lee

摘要:上面四个属性是CertSetCertificateContextProperty或CertGetCertificateContextProperty可以为证书上下文设置的几个属性,下面对它们的关联简单的进行分析(其中的意义我也不太清楚):通过CERT_KEY_CONTEXT_PROP_ID属性,我们可以为证书上下文设置一个CERT_KEY_CONTEXT结构体,在MSDN中,我们可以看到结构体的定义:typedef struct _CERT_KEY_CONTEXT { DWORD cbSize; HCRYPTPROV hCryptProv; DWORD ... 阅读全文

posted @ 2014-03-20 13:57 Ady Lee

摘要:证书的两种形式:1、带私钥的证书,即p12格式证书(后缀为.pfx)2、不带私钥的证书,有多种格式,通常我们使用的是cer格式证书(后缀为.cer)当我们安装.pfx格式证书时,windows的安装程序会为我们生成一个唯一的密钥容器(密钥容器名为GUID格式),并把证书中的私钥存储在密钥容器中,然后把脱除私钥的证书(为.cer格式证书)存放在证书库中(如果是个人证书,会默认存放在个人证书库,也就是MY系统证书库中),证书库并为证书维护一个CERT_KEY_PROV_INFO_PROP_ID属性,通过此属性可以获取存储私钥的CSP和密钥容器,所以当我们使用证书进行数字签名时,可以找到对应的CSP 阅读全文

posted @ 2014-03-20 13:55 Ady Lee

摘要:这两个星期真是被OpenSSL给烦透了,几个很简单基本的问题(如果没人告诉你真的很难测出来)把我搞的。。哎,有时候真是不知道自己该不该搞技术,发现自己头脑真是蠢得很。。。直接上正题。第一个问题:前面讲过OpenSSL可以使用windows下的CAPI引擎(我也不太清楚是从哪个版本开始后就开始支持了,网上说是0.9.8i后),但是OpenSSL在windows下默认编译时是不会把它加入内嵌引擎的,所以我们要在编译时设置一些参数。。如果要使用CAPI引擎,我们要在编译源码时使用:>perl Configure VC-WIN32 enable-capieng -DOPENSSL_SSL_CLI 阅读全文

posted @ 2014-03-20 13:22 Ady Lee

摘要:http://stackoverflow.com/questions/1231178/load-an-x509-pem-file-into-windows-cryptoapiI discovered the "magic" sequence of calls to import a RSA public key in PEM format. Here you go:decode the key into a binary blob with CryptStringToBinary; pass CRYPT_STRING_BASE64HEADER in dwFlagsdecod 阅读全文

posted @ 2014-03-19 16:51 Ady Lee

摘要:.net平台下面的RSA算法实现是RSACryptoServiceProvider,如果安装了 Microsoft Enhanced Cryptographic Provider,则 RSACryptoServiceProvider 支持长度从 384 位至 16384 位(增量为 8 位)的密钥。如果安装了 Microsoft Base Cryptographic Provider,则支持长度从 384 位至 512 位(增量为 8 位)的密钥。 目前该算法支持的填充Padding算法为PKCS#1 1.5和OAEPPadding,而签名算法目前仅支持SHA1withRSA算法,其他的好像没 阅读全文

posted @ 2014-03-19 16:47 Ady Lee

摘要:很久以前的文章中,演示了如何对于.net和win32下面的delphi的RSA互操作性的实现,对于C#和JAVA之前的RSA加密解密也是很简单的,一般都采用了标准的规范,所以在互操作性方面是很方便的。之前也有博友私信请教这方面的问题,现在放出一个demo实现:一、概述算法:RSA/ECB/PKCS1PaddingRSA KEY:为了便于演示,使用http://www.cnblogs.com/midea0978/articles/768824.html中的Key代码:C# & JAVA二、JAVA平台1importorg.junit.Test;2importsun.misc.BASE64 阅读全文

posted @ 2014-03-19 16:46 Ady Lee

摘要:.NET_RSA加密全接触(重、难点解析) .NET Framework提供了两个类供我们使用RSA算法,分别是:用于加密数据的RSACryptoServiceProvider和用于数字签名的DSACryptoServiceProvider,本文主要谈论RSACryptoServiceProvider的使用以及微软实现RSA算法时的一些主要特点。1、.NET中RSA密钥格式RSA的密钥有两种表现形式,一种是通过RSAParameters对象来表现,另一种是通过XML字符串来表现,当通过默认构造函数构造一个RSACryptoServiceProvider实例的时候,会自动生成一对公私钥,可以通过 阅读全文

posted @ 2014-03-19 16:44 Ady Lee

摘要:.NET和java的RSA互通,仅此而已在开始这篇文章之前,先请读者朋友阅读老唐的这两篇文章:1、Java与.Net环境下RSA加密解密交互不成功的问题解决2、Java与.Net环境下RSA加密解密交互不成功的问题解决【续】和我的这篇文章3、.NET_RSA加密全接触(重、难点解析)前面老唐的两篇文章中提到,要想实现.NET和Java的RSA互通,只能抛弃.NET现有的加密算法,而是利用http://www.codeproject.com/csharp/biginteger.asp项目中的BigInteger类(.NET Framework4中已增加了这个类的实现,在System.Number 阅读全文

posted @ 2014-03-19 16:42 Ady Lee

摘要:昨天写过了RSA非对称加密解密的交互方式,其实数字签名也是RSA非对称加密,只不过用私钥加密的,再加上个hash摘要CryptoAPI与openssl RSA非对称加密解密(PKCS1 PADDING)交互已经提到关于证书和私钥的数据以及对象获取,这里就不再重复讨论1.openssl的签名及验证[cpp]view plaincopyprint?voidopensslSigner::sign(EVP_PKEY*evpKey,BYTE**signValue,unsignedint&signLen,BYTE*text,inttextLen){EVP_MD_CTXmdctx;//摘要算法上下文 阅读全文

posted @ 2014-03-19 15:43 Ady Lee

摘要:(以下代码中都只做测试用,有些地方没有释放内存...这个自己解决下)1.RSA非对称的,首先提供一个供测试用的证书和私钥的数据1)pem格式的证书和私钥(公私钥是对应的)的base64编码[cpp]view plaincopyprint?voidreadPriKey(string&a){a="-----BEGINRSAPRIVATEKEY-----\n";a.append("MIICXQIBAAKBgQDTFPiHkUX279j7OnK2ToLrwD/QI9N/fL/XoMnW1sBYJdSWs/VP\n");a.append("5oy 阅读全文

posted @ 2014-03-19 15:42 Ady Lee

摘要:继上次只有CryptoAPI的加密后,这次要实现openssl的了动机:利用CryptoAPI制作windows的IE,火狐和chrome加密控件后,这次得加上与android的加密信息交互先前有说openssl移植到android的过程,这里就不再提android如何调用openssl了, 而那一篇第9条提到的openssl与cryptoAPI兼容的两种方式感觉实现都不太好用,这里再次提出一种AES加密的实现方式写这边文章的最主要的原因,用过CryptoAPI的都知道,很多东西都封装了,如果要与其他加密组件交互,得用其他组件来实现CryptoAPI的思路环境:windows visua... 阅读全文

posted @ 2014-03-19 15:41 Ady Lee

摘要:一、DER编码密钥对先说下DER编码,是因为JCE本身是支持DER编码密钥对的解析的,可以参见PKCS8EncodedKeySpec和X509EncodedKeySpec.DER编码是ASN.1编码规则中的一个子集,具体格式如何编排没有去了解,但最终呈现肯定的是一堆有规律的二进制组合而成。PKCS#8定义了私钥信息语法和加密私钥语法,而X509定义证书规范,通常都会用DER和PEM进行编码存储,而在JAVA中则使用的DER。接下来看看如果通过DER编码的密钥对分别获取JAVA的公私钥对象。1.下面一段是生成私钥对象的,传入参数是DER编码的私钥内容。[java]view plaincopypr 阅读全文

posted @ 2014-03-19 15:37 Ady Lee

摘要:默认情况下,.NET生成的RSA密钥对可以用XML或字节流来保存,而JAVA中生成的RSA密钥对只能用字节流来保存。而它们的字节流格式不同,就导致Java中生成的RSA密钥对不能在.NET中使用,而.NET中生成的密钥对又不能在Java中使用。而.NET的XML保存方法我觉得比较有通用性,于是就以.NET中RSA密钥保存的XML格式作为兼容格式,这样它们就可以通用了。下面是Java代码:PS:在Chrome上用博客园的编辑器设置不了代码折叠,保存后折叠的代码就打不开了。。。=============================================文件:StringHelper. 阅读全文

posted @ 2014-03-19 15:16 Ady Lee

摘要:.NET导入openssl生成的公钥之BEGIN RSA PUBLIC KEY我得到了一个公钥,形式如下-----BEGIN RSA PUBLIC KEY-----MIGJAoGBAMroxz3qtok…….……-----END RSA PUBLIC KEY-----相要用C#程序,将它导入并加密数据传给opensll应用程序解密。在网上找到很多方法,其中opensslkey.cs文件的实现最完善,但它只能解析-----BEGIN PUBLIC KEY-----打头的公钥。而且内容的长度也不同,看来它是解不开了。在搜索的过程中,发现Jeffrey Walton有文章Cryptographic 阅读全文

posted @ 2014-03-19 15:14 Ady Lee

摘要:PEM文件格式存档Author:Roson sunsunxiao@tomonline-inc.comTime:2006-4-111.描述:Openssl使用PEM(RFC1421-1424)文档格式,如果使用其他语言包,则需要将此格式进行解码并将各个私公钥加入。2.说明:a)首先使用BASE64解码,如果是非ANSI TXT格式,需要做转换。b)一个RSA私钥包含一下信息(1024位):>openssl rsa -in key.pem -noout -textmodulus:00:d5:00:b2:18:c3:04:d1:ac:80:c6:22:a0:cc:5c:f1:c0:4a:83: 阅读全文

posted @ 2014-03-19 15:13 Ady Lee 阅读(4996) 评论(0) 推荐(0)

摘要:http://www.christian-etter.de/?p=771In .NET, RSACryptoServiceProvider greatly simplifies common tasks associated with public/private keys, such as signing of data and verifying a signature.Unfortunately, there is only a single format (proprietary XML) available for importing and exporting public/pri 阅读全文

posted @ 2014-03-19 15:03 Ady Lee