本质上是将数据从基于java的系统转移到C#系统。
java端的代码对密码执行以下操作
----------密码-------
ByteBuffer byteBuffer = ByteBuffer.allocate( 2 * 4 + saltBytes.length + secretKeyBytes.length);
byteBuffer.putInt(pbkdf2EncryptionConfiguration.getKeySize());
byteBuffer.putInt(pbkdf2EncryptionConfiguration.getRounds());
byteBuffer.put(saltBytes);
byteBuffer.put(secretKeyBytes);
return Base64.encode(byteBuffer.array());
---------- 结束代码 -------
总之,一个以数字开头的字节数组有另一个数字,后面是盐,后面是秘密密钥
我的问题是,java字节与C#(有符号/无符号)不同,我本质上只想提取salt/密钥。
到目前为止,我在C#中的过程是
----------密码-------
byte[] actualPasswordByteArray = Convert.FromBase64String(hash);
int abc = BitConverter.ToInt32(items, 0);
int def = BitConverter.ToInt32(items, 4);
byte[] salt = new byte[SaltByteSize];
byte[] key = new byte[HashByteSize];
using (var deriveBytes = new Rfc2898DeriveBytes(password, 8, 128000))
{
salt = deriveBytes.Salt;
key = deriveBytes.GetBytes(leftOverBytes);
}
---------- 结束代码 -------
但我没有得到正确的价值观
def
保存回合数,但您将其硬编码为128000
因为你让盐随机生成,你现在有代码需要大约100ms来产生一个随机的答案,这个答案可以在大约10ns内产生。
字节流中的每一个值都是非常重要的。如果你发现自己硬编码了任何值,那么你就做错了。
问题内容: 需要: 我需要使用opencv 进行格式化,需要将图像从Java发送到C ++(opencv代码)。 我要做的步骤: 情况1: : 使用以下链接在c (opencv)中将mat编码为stringstream并在c (opencv)中将stringstream解码为mat,以便将base64编码从OpenCV cv :: Mat转换为std ::ifstream- 效果很好。 但是当我使
我想通过JavaScript将“base64”字符串转换为字节数组。 我收到来自URL的字符串。 我想把字符串转换成字节数组。因为我需要这个字节数组来发送Rest APIendpoint。rest API content-type=application/octet-stream。
我正在制作一个Android应用程序,它可以与蓝牙设备进行通信。我正在为选定的特征写一条特定的信息,如下所示: 我的转换函数如下所示: 我试图弄清楚为什么在这种情况下,我的转换输出是这样的: D/上传数据集:消息:�������������������� 这很奇怪,因为当我使用相同的转换函数来转换作为蓝牙通知接收到的值时,它工作得非常好。欢迎提出问题所在的任何建议
问题内容: 我是Java新手。我收到字节数组中的UDP数据。字节数组的每个元素都具有十六进制值。我需要将每个元素转换为整数。 如何将其转换为整数? 问题答案: 样例代码:
我一直在测试char casting,我经历了以下几点: 有人能解释为什么我在1中给字节添加了一个final时它工作得很好吗?
问题内容: 我一直在测试字符转换,并经历了以下过程: 任何人都可以解释为什么当我在字节中添加final后在1中可以正常工作吗? 问题答案: 当变量为时,编译器将自动内联其值为1的值。该值可表示为,即: 相当于 实际上,根据本节中有关变量的部分,将其视为常量: 原始类型或类型的变量,即,用一个编译时间常量表达式(§15.28)初始化,被称为 恒定变量 。