【发布时间】:2018-09-21 21:01:22
【问题描述】:
我买了一些硬件,分享了一份关于如何验证here 的文档:
加密绝对不是我的事,我正在尝试找出加密的方式或什至是什么形式的加密,以尝试查找在线示例,以便我可以尝试使用 c# 和更可取的 .net 核心进行交流,这样我就可以成为 x-平台
现在有代码 here 可以做到这一点,除了它在 node.js 中我相信而且我不知道加密库
总而言之,这就是他们在文档中的陈述:
- 通过“jdev/sys/getPublicKey”-> {publicKey} 获取 Miniservers 公钥存储在客户端 B.格式:X.509 编码的密钥 ANS.1
- 打开一个 WebSocket 连接使用以下路径:“ws://{ipOrUrl}:{port}/ws/rfc6455” b.将“遥控器”指定为 Sec-WebSocket-协议。 C。 Miniserver 不支持 wss://。
- 生成 AES256 密钥 -> {key} (Hex)
- 生成随机 AES iv(16 字节)-> {iv}(十六进制)
- RSA 使用 {publicKey}-> {session-key} (Base64) 加密 AES 密钥+iv “{key}:{iv}”是需要加密的payload 使用 RSA
- 通过“jdev/sys/keyexchange/{session-key}”交换密钥
- 生成随机盐,十六进制字符串(长度可能不同,例如 2 个字节)-> {salt}
- 现在有两种选择:如果存在令牌,则按照使用令牌进行身份验证 b 中所述进行身份验证。如果需要令牌 获取,按照获取令牌配置 9.3 中的说明进行操作 与 Miniserver 通信第 5 页,共 21 页
- 在成功基于令牌的身份验证或获取新令牌后,套接字已通过身份验证并准备就绪。
所以我很确定我对第 2 步很满意(也许不是 x.509 编码密钥的格式。我将其视为去除填充并仅获取 base64 值:
UriBuilder builder = new UriBuilder("http://192.168.0.77");
using (var request = new LxHttpRequest(builder.Uri))
{
CancellationToken token = new CancellationToken();
string result = request.GetStringAsync("jdev/sys/getPublicKey", token).Result;
var res = ResultConverter.Deserialize(result);
Console.WriteLine(TokenAuth.parsePublicKey(res.Content));
}
第 3 步,我从 loxnet 克隆了代码,我认为这是一个很好的起点,对此我很满意..
第 4/5 步,是我所在的位置:
var aes = new AesCryptoServiceProvider();
aes.GenerateIV();
byte[] iv = aes.IV;
aes.GenerateKey();
Console.WriteLine("Key base64: {0}", Convert.ToBase64String(aes.Key));
但是在这一点上,我的头被腌制了,我很生气。我很欣赏这种感觉就像是在寻求家庭作业的帮助-但我更希望有人能解释一下这叫什么,这样我就可以继续搜索-除非有人可以提供示例/ sn-ps 的帮助,或者建议使用 nuget 包进行艰苦的工作 - 我看过 bouncycastle 但这让我的眼睛想流血试图理解任何东西:D :D
请放轻松!
【问题讨论】:
-
你到底在问什么?我了解问题的范围,但是您已经完成了第 4/5 步并且...什么?这里有什么问题?代码不工作还是你不确定现在该做什么?你能问一个具体的问题吗?
-
我不知道接下来我需要做什么! - 我不明白知道这是哪种 AES 加密方法的步骤,所以我可以找到我可以适应的示例代码!例如查看 bouncycastle 功能列表bouncycastle.org/csharp 太多不同的算法,我无法测试每个.. 肯定有人知道这是什么吗?
-
你有没有让这个工作?我正在尝试做同样的事情。
-
@PaulSinnema - 不太接近,但随后决定将基于令牌的身份验证添加到 github 上的现有项目之一可能会更容易。很高兴将其离线并通过电子邮件聊天,因为它可能会偏离主题:)
-
好的,您可以通过 paul@sinnema.ch 与我联系
标签: c# encryption