2008-09-23 44 views
0

我不是密碼專家,但據我所知,3DES是一種對稱加密算法,這意味着它不使用公鑰/私鑰。儘管如此,我的任務是使用公鑰加密數據(特別是.CER文件)。 如果您忽略整個對稱/不對稱thang,我應該能夠使用公鑰中的密鑰數據作爲TripleDES密鑰。 但是,我無法從.CER文件中提取關鍵字節。 這是代碼,因爲它代表..3DES與.cer公鑰?

TripleDESCryptoServiceProvider cryptoProvider = new TripleDESCryptoServiceProvider(); 
X509Certificate2 cert = new X509Certificate2(@"c:\temp\whatever.cer"); 
cryptoProvider.Key = cert.PublicKey.Key. 

我可以找到從證書的原始密鑰字節最簡單的方法是ToXmlString(布爾),然後做在返回的字符串一些哈克substringing。 但是,這似乎很駭人,我覺得我必須錯過一個更簡單,更明顯的方式來做到這一點。

我是否錯過了一種更簡單的方式來使用.cer文件向C#3DES加密類提供密鑰數據,或者是否將其從證書xml字符串中篡改出去真的是最好的方式?

+0

找出他們真正想要的東西不是更好,因爲要求對稱算法的公鑰密碼明顯不是它嗎? – 2008-09-23 14:50:34

+0

我不知道你,Arachnid,但在我的經驗中,它更容易與流動。提問者似乎很清楚這裏的不兼容性,爲什麼不讓他按照他的要求去做呢? – 2008-09-23 15:15:47

回答

2

cryptoProvider.Key = cert.GetPublicKey()?

0

我想你缺少的是從包含關鍵字節的字符串轉換字節。

希望的方法FromBase64String將幫助您:

byte[] keyBytes = Convert.FromBase64String(sourceString); 
1

加密大量使用非對稱加密的數據是不是要走的路。相反,使用對稱算法對數據進行加密,並使用公鑰對對稱密鑰(和IV)進行加密。來自MSDN的

This page真的幫助我開始使用.Net對稱密碼術。

4

使用非對稱密碼生成的密鑰用於對稱密碼學並不是一個好主意。沒有什麼能夠阻止你使用公鑰作爲3DES的加密密鑰,但最終的結果是任何有權訪問公鑰的人(這意味着每個人都可以!)將能夠解密你的密文。

1

這裏真正的問題是公鑰是public。意思是免費提供的,這意味着它提供了零加密安全性。

這個線程中的任何人都擁有解密所有信息所需的所有信息。谷歌也是如此。

請儘量鼓勵您的用戶不要使用這樣的公鑰數據。至少,讓他們給一個密碼或其他稍微安全一點的密碼塊,用來生成一致的密鑰。

還有一件事。證書密鑰的大小各不相同。它可能會處理掉密鑰中的額外字節,但如果密鑰恰好短於3DES密鑰需求,則可能會得到數組索引/離開邊界異常。我懷疑會發生什麼,3DES只需要56位,而證書密鑰幾乎總是256位或更大。