2016-05-04 87 views
1

我想端口这段代码C#C#相当于Java的KDFCounterBytesGenerator(从BouncyCastle的)

byte[] result = new byte[length]; 
byte[] data = ...; 
byte[] key = ...; 

HMac hMac = new HMac(new SHA256Digest()); 
KDFCounterBytesGenerator g = new KDFCounterBytesGenerator(hMac); 
g.init(new KDFCounterParameters(key, data, 32)); 
g.generateBytes(result , 0, result .length); 

但我无法找到C#BouncyCastle的库中的任何等价类。
有什么建议吗?

编辑: 我从Java源代码移植的KDFCounterBytesGenerator它工作得很好..

+0

我看到你已经从Java移植了实现。你能分享一下代码吗? – kosmakoff

回答

0

BouncyCastle has an equivalent library for C#应包含最如果不是所有的相同的功能,它的Java版本有一些小的语法差异:

enter image description here

你应该能够通过的NuGet来安装它,然后相应地引用它:

// Using statements (for BouncyCastle) 
using Org.BouncyCastle.Crypto.Digests; 
using Org.BouncyCastle.Crypto.Generators; 

// Define your byte[]s 
byte[] result = new byte[1]; 
byte[] data = new byte[2]; 
byte[] key = new byte[3]; 

// Build your HMac, Generator and generate your bytes 
HMac hMac = new HMac(new Sha256Digest()); 
Kdf1BytesGenerator g = new Kdf1BytesGenerator(hMac.GetUnderlyingDigest()); 
g.Init(new Org.BouncyCastle.Crypto.Parameters.KdfParameters(key, data)); 
g.GenerateBytes(result, 0, result.Length); 
+0

这不适合我。结果是不同的! –

+0

您可能会考虑尝试'Kdf2BytesGenerator'类以及它可能会有不同的结果。我在一段时间内没有和BouncyCastle一起工作,或者使用过你指定的方法,但我会假设存在等价的方法。我已经更新了示例以使用可能会有影响的'HMac'对象 –