网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > ASP.NET技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.ASP.NET2.0下含有DropDownList的.
.关于脏字典过滤问题-用正则表达.
.在ASP.NET中把图片保存到SQL SER.
.通过web.config设置数据库连接串.
.借助HiddenText 确定CheckBoxLis.
.解决网爬工具爬取页面信息出现乱.
.Asp.net前后台值的调用.
.在ASP.NET Atlas中调用Web Servi.
.asp.net 2.0 主题中多CSS文件引用.
.asp.net中XML文件作为中间件进行.
.小心!目录删除及重命名操作,一.
.虚拟主机上asp.net运行权限不足问.
.封装的一些实现图片水印与图片自.
.六步使用ICallbackEventHandler实.
.Repeater读取数据并分页 .
.ASP.NET如何进行性能优化问题.
.ASP.NET对IIS中的虚拟目录进行操.
.由于未处理服务器端代码而导致 A.
.ASP.NET中利用VWD操作数据库.
.从asp.net页面发送电子邮件 .

在Java和.NET平台的加密术比较

发表日期:2006-9-23


最近在写一个Java的消息服务器,同时需要做一个.NET版本的客户端。他们之间需要安全通讯,基于一些简单的密码协议,用到公钥加密、对称加密、Hash算法。这个过程中,我对这两个平台的加密部分有了一定了解,以下也是我的一些新的认识吧。

1、对称加密
1) Java 1.5的对称加密很简单,提供的算法也较多。可以说是,使用简单,傻瓜式,而且功能齐全。
例如:
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");

Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] decryptText = cipher.doFinal(data);
2) .NET 2.0的对称加密,缺省加密模式是CBC,CBC加密的时候,需要一个密钥的同时,还需要初始化向量IV,这会使得初学入者使用起来不方便,这个问题到是十分容易对付的,修改一下配置就好了。
SymmetricAlgorithm algorithm = SymmetricAlgorithm.Create(algorithmName);
algorithm.Mode = CipherMode.ECB;
algorithm.Key = key;
algorithm.Padding = PaddingMode.PKCS7;通过这种设置之后,就能够跟Java通讯操作,互为加密解密。

3) .NET 2.0和Java 1.5方面,加密算法的名字有些地方稍有差别。
AES <==> Rijndael
DESede <==> TripleDES
这是似乎是常识。


2、公钥加密算法RSA
1) Java 1.5中,RSAPublicKey进行getEncoded()得到字节数组是ASN.1编码的。逆转回来需要使用X509EncodedKeySpec,这个细节需要阅读文档细节或者对密码学有一定了解才知道。例如:
//public key ==> bytes
PublicKey publicKey =
byte[] rawPublicKey = publicKey.getEncoded();

// bytes ==> public key
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(rawPublicKey);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
Key newPublicKey = keyFactory.generatePublic(x509KeySpec);
除此之外,Java的公钥加密部分,还是相当易于使用的。风格依然是功能简单,傻瓜式使用,功能齐全。

Java中,支持ASN.1编码,但是隐藏其中,使用者完全觉察不到。

2) .NET 2.0中,设计有些混乱,并不支持ASN.1编码。但是Mono似乎在做ASN.1编码的支持。为此我自己借鉴一个Java开元JCE的实现,实现了一个.NET版本的ASN Parser和ASN Builder,花了两天时间。如下:
public static RSAParameters ASN1ToPublicKey(byte[] rawPublicKey)
{
    ASN1InputStream asnInput = new ASN1InputStream(rawPublicKey);
    ASN1Sequence asnSeq = (ASN1Sequence)asnInput.ReadObject();
    SubjectPublicKeyInfo subjectPublicKeyInfo = new SubjectPublicKeyInfo(asnSeq);

    DERObjectIdentifier algOid = subjectPublicKeyInfo.AlgorithmId.ObjectId;

    RSAPublicKeyStructure pubKey = new RSAPublicKeyStructure(
            (ASN1Sequence)subjectPublicKeyInfo.PublicKey);

    byte[] modulus = pubKey.Modulus;
    byte[] publicExponent = pubKey.PublicExponent;

    RSAParameters pram = new RSAParameters();
    pram.Modulus = modulus;
    pram.Exponent = publicExponent;

    RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
    rsa.ImportParameters(pram);

    return pram;
}

public static byte[] PublicKeyToASN1(RSAParameters pram)
{
    SubjectPublicKeyInfo info = new SubjectPublicKeyInfo(
        new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption,
                new DERNull()), new RSAPublicKeyStructure(pram.Modulus, pram.Exponent).DERObject);

    byte[] rawPublicKey = info.GetDEREncoded();
    return rawPublicKey;
}

3、总体感觉
1) Java的安全模块设计得还是很好的,简单易用,功能也齐全。
2) .NET 2.0则是有点乱,命名风格和系统框架有些不协调,功能欠缺,代码组织的不够理想。
3) 在Mono中,对安全的支持要比微软已发布的要好,从网上可以看到,.NET Framework 2.0的一些特性也是从Mono中借鉴过来的。
4) 甚至可以认为,.NET加密模块的开发团队能力可能不是很强。就如那一句话“编写糟糕的代码并非我们的专利”。
http://www.cnblogs.com/jobs/archive/2006/09/22/512297.html

上一篇:关于Asp.net中使用以下代码导出Excel表格的问题 人气:6487
下一篇:ASP.NET如何存取SQL Server数据库图片 人气:5817
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐