麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發(fā)設計 > 正文

在Java和.NET平臺的加密術比較

2019-11-18 16:58:27
字體:
來源:轉載
供稿:網友

最近在寫一個java的消息服務器,同時需要做一個.NET版本的客戶端。他們之間需要安全通訊,基于一些簡單的密碼協(xié)議,用到公鑰加密、對稱加密、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()得到字節(jié)數(shù)組是ASN.1編碼的。逆轉回來需要使用X509EncodedKeySpec,這個細節(jié)需要閱讀文檔細節(jié)或者對密碼學有一定了解才知道。例如:
//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的實現(xiàn),實現(xiàn)了一個.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則是有點亂,命名風格和系統(tǒng)框架有些不協(xié)調,功能欠缺,代碼組織的不夠理想。
3) 在Mono中,對安全的支持要比微軟已發(fā)布的要好,從網上可以看到,.NET Framework 2.0的一些特性也是從Mono中借鑒過來的。
4) 甚至可以認為,.NET加密模塊的開發(fā)團隊能力可能不是很強。就如那一句話“編寫糟糕的代碼并非我們的專利”。
http://www.companysz.com/jobs/archive/2006/09/22/512297.html


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久久久久久久久久久久九 | 亚洲综合一区在线观看 | 黄色高清av| 一级成人免费 | 一区二区免费网站 | 青青国产在线视频 | 久久精品视频在线 | 俄罗斯16一20sex牲色另类 | 国产一区二区三区高清 | 99re色| 鲁人人人鲁人人鲁精品 | hdjapanesemassagehd日本| 日本aaaa片毛片免费观看视频 | av成人免费 | av免播放 | 福利免费视频 | 亚洲成人福利网站 | 国产精品高潮99久久久久久久 | 亚州精品在线视频 | 欧美毛片 | 亚洲嫩草av| gril hd| 激情视频免费观看 | 久久99久久99精品 | 色婷婷av一区二区三区久久 | 亚洲 综合 欧美 动漫 丝袜图 | 99爱福利视频在线观看 | 久久免费视频一区 | av电影免费在线 | 久久精品视频网址 | 黄色一级片免费观看 | 国产又白又嫩又紧又爽18p | 美女黄色毛片免费看 | 日本成人二区 | 欧美性生活视频免费 | 免费a级观看 | 国产午夜亚洲精品理论片大丰影院 | 久久精品中文字幕一区二区 | 色视频欧美 | 久久久久国产精品久久久久 | 国产羞羞视频在线观看免费应用 |