From 89b5a8af2a56a14317c9e910f498c9091bc18256 Mon Sep 17 00:00:00 2001
From: SmallChi <564952747@qq.com>
Date: Sun, 15 Apr 2018 16:17:15 +0800
Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E6=94=B9=E5=8A=A0=E5=AF=86=E8=A7=A3?=
=?UTF-8?q?=E5=AF=86=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95=202.=E5=A2=9E?=
=?UTF-8?q?=E5=8A=A0=E6=95=B0=E6=8D=AE=E5=8C=85=E7=89=88=E6=9C=AC/?=
=?UTF-8?q?=E6=98=AF=E5=90=A6=E5=8A=A0=E5=AF=86=E6=9E=9A=E4=B8=BE/?=
=?UTF-8?q?=E6=B6=88=E6=81=AF=E5=A4=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/JT809.Protocol.Test/BaseTest.cs | 8 +++-
.../Escape/JT809EscapeImplTest.cs | 29 ++++++------
.../JT809.Protocol.Test.csproj | 15 +++---
src/JT809.Protocol.Test/packages.config | 5 +-
.../Configs/JT809EncryptConfig.cs | 7 +--
.../Encrypt/JT809EncryptImpl.cs | 12 ++---
.../ProtocolPacket/EncryptEnum.cs | 11 +++++
src/JT809.Protocol/ProtocolPacket/Header.cs | 15 ++++++
src/JT809.Protocol/ProtocolPacket/Version.cs | 46 +++++++++++++++++++
9 files changed, 115 insertions(+), 33 deletions(-)
create mode 100644 src/JT809.Protocol/ProtocolPacket/EncryptEnum.cs
create mode 100644 src/JT809.Protocol/ProtocolPacket/Header.cs
create mode 100644 src/JT809.Protocol/ProtocolPacket/Version.cs
diff --git a/src/JT809.Protocol.Test/BaseTest.cs b/src/JT809.Protocol.Test/BaseTest.cs
index 3e4f5c6..669f4f8 100644
--- a/src/JT809.Protocol.Test/BaseTest.cs
+++ b/src/JT809.Protocol.Test/BaseTest.cs
@@ -9,6 +9,12 @@ namespace JT809.Protocol.Test
{
public class BaseTest
{
- public JT809EncryptConfig JT809EncryptConfig = new JT809EncryptConfig();
+ public JT809EncryptConfig JT809EncryptConfig = new JT809EncryptConfig()
+ {
+ Key=0x01,
+ IA1 = 20000000,
+ IC1= 30000000,
+ M1= 10000000
+ };
}
}
diff --git a/src/JT809.Protocol.Test/Escape/JT809EscapeImplTest.cs b/src/JT809.Protocol.Test/Escape/JT809EscapeImplTest.cs
index 995cb1d..ff38ea5 100644
--- a/src/JT809.Protocol.Test/Escape/JT809EscapeImplTest.cs
+++ b/src/JT809.Protocol.Test/Escape/JT809EscapeImplTest.cs
@@ -1,7 +1,11 @@
using System;
+using System.Diagnostics;
+using System.Linq;
using System.Text;
+using JT809.Protocol.Configs;
using JT809.Protocol.Encrypt;
using Microsoft.VisualStudio.TestTools.UnitTesting;
+using Newtonsoft.Json;
namespace JT809.Protocol.Test.Escape
{
@@ -10,32 +14,29 @@ namespace JT809.Protocol.Test.Escape
{
public IEncrypt encrypt;
- public IEncrypt encrypt2;
-
public JT809EscapeImplTest()
{
- encrypt = new JT809EncryptImpl(0x01,base.JT809EncryptConfig);
- encrypt2 = new JT809EncryptImpl(0x01, base.JT809EncryptConfig);
+ encrypt = new JT809EncryptImpl(base.JT809EncryptConfig);
}
-
[TestMethod]
public void Encrypt()
{
- var pre = System.Text.Encoding.UTF8.GetBytes("smallchi");
- encrypt.Encrypt(pre);
+ byte[] buffer = System.Text.Encoding.UTF8.GetBytes("smallchi");
+ Debug.WriteLine(JsonConvert.SerializeObject(buffer.Select(s => s).ToList()));
+ encrypt.Encrypt(buffer);
+ Debug.WriteLine(JsonConvert.SerializeObject(buffer.Select(s => s).ToList()));
}
[TestMethod]
public void Decrypt()
{
- byte[] buffer = System.Text.Encoding.UTF8.GetBytes("smallchi");
- byte[] oldBuffer=new byte[buffer.Length];
- buffer.CopyTo(oldBuffer, 0);
- encrypt.Encrypt(buffer);
- encrypt2.Decrypt(buffer);
- string name=System.Text.Encoding.UTF8.GetString(buffer);
- Assert.AreEqual("smallchi",name);
+ byte[] buffer =new byte [8]{ 92, 113, 125, 112, 112, 127, 116, 117};
+ Debug.WriteLine(JsonConvert.SerializeObject(buffer.Select(s => s).ToList()));
+ encrypt.Decrypt(buffer);
+ Debug.WriteLine(JsonConvert.SerializeObject(buffer.Select(s => s).ToList()));
+ string name = System.Text.Encoding.UTF8.GetString(buffer);
+ Assert.AreEqual("smallchi", name);
}
}
}
diff --git a/src/JT809.Protocol.Test/JT809.Protocol.Test.csproj b/src/JT809.Protocol.Test/JT809.Protocol.Test.csproj
index c6ca57e..fc90444 100644
--- a/src/JT809.Protocol.Test/JT809.Protocol.Test.csproj
+++ b/src/JT809.Protocol.Test/JT809.Protocol.Test.csproj
@@ -1,6 +1,6 @@
-
+
Debug
AnyCPU
@@ -39,10 +39,13 @@
- ..\packages\MSTest.TestFramework.1.2.0\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll
+ ..\packages\MSTest.TestFramework.1.2.1\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll
- ..\packages\MSTest.TestFramework.1.2.0\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll
+ ..\packages\MSTest.TestFramework.1.2.1\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll
+
+
+ ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll
@@ -68,8 +71,8 @@
这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。
-
-
+
+
-
+
\ No newline at end of file
diff --git a/src/JT809.Protocol.Test/packages.config b/src/JT809.Protocol.Test/packages.config
index 6384d0b..b48b200 100644
--- a/src/JT809.Protocol.Test/packages.config
+++ b/src/JT809.Protocol.Test/packages.config
@@ -1,5 +1,6 @@
-
-
+
+
+
\ No newline at end of file
diff --git a/src/JT809.Protocol/Configs/JT809EncryptConfig.cs b/src/JT809.Protocol/Configs/JT809EncryptConfig.cs
index eaf20ce..b0a4fed 100644
--- a/src/JT809.Protocol/Configs/JT809EncryptConfig.cs
+++ b/src/JT809.Protocol/Configs/JT809EncryptConfig.cs
@@ -2,8 +2,9 @@
{
public class JT809EncryptConfig
{
- public uint M1 { get; set; } = 10000000;
- public uint IA1 { get; set; } = 20000000;
- public uint IC1 { get; set; } = 30000000;
+ public uint M1 { get; set; }
+ public uint IA1 { get; set; }
+ public uint IC1 { get; set; }
+ public uint Key { get; set; }
}
}
diff --git a/src/JT809.Protocol/Encrypt/JT809EncryptImpl.cs b/src/JT809.Protocol/Encrypt/JT809EncryptImpl.cs
index 0f4a900..03a93e9 100644
--- a/src/JT809.Protocol/Encrypt/JT809EncryptImpl.cs
+++ b/src/JT809.Protocol/Encrypt/JT809EncryptImpl.cs
@@ -9,12 +9,10 @@ namespace JT809.Protocol.Encrypt
{
private JT809EncryptConfig Config;
- private uint Key { get; set; }
- public JT809EncryptImpl(uint key,JT809EncryptConfig config)
+ public JT809EncryptImpl(JT809EncryptConfig config)
{
Config = config;
- Key = key;
}
public void Decrypt(byte[] buffer)
@@ -24,9 +22,9 @@ namespace JT809.Protocol.Encrypt
public void Encrypt(byte[] buffer)
{
- if (0 == Key)
+ if (0 == Config.Key)
{
- Key = 1;
+ Config.Key = 1;
}
uint mkey = Config.M1;
if (0 == mkey)
@@ -35,8 +33,8 @@ namespace JT809.Protocol.Encrypt
}
for (int idx = 0; idx < buffer.Length; idx++)
{
- Key = Config.IA1 * (Key % mkey) + Config.IC1;
- buffer[idx] ^= (byte)((Key >> 20) & 0xFF);
+ Config.Key = Config.IA1 * (Config.Key % mkey) + Config.IC1;
+ buffer[idx] ^= (byte)((Config.Key >> 20) & 0xFF);
}
}
}
diff --git a/src/JT809.Protocol/ProtocolPacket/EncryptEnum.cs b/src/JT809.Protocol/ProtocolPacket/EncryptEnum.cs
new file mode 100644
index 0000000..f2cb699
--- /dev/null
+++ b/src/JT809.Protocol/ProtocolPacket/EncryptEnum.cs
@@ -0,0 +1,11 @@
+namespace JT809.Protocol.ProtocolPacket
+{
+ ///
+ /// 报文加密标识位 b: 0 表示报文不加密,1 表示报文加密。
+ ///
+ public enum EncryptEnum : byte
+ {
+ No = 0X00,
+ Yes = 0X01,
+ }
+}
diff --git a/src/JT809.Protocol/ProtocolPacket/Header.cs b/src/JT809.Protocol/ProtocolPacket/Header.cs
new file mode 100644
index 0000000..abfc0d9
--- /dev/null
+++ b/src/JT809.Protocol/ProtocolPacket/Header.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace JT809.Protocol.ProtocolPacket
+{
+ ///
+ /// Message Header 数据头
+ ///
+ public class Header
+ {
+ public Version Version { get; private set; }
+ public EncryptEnum EncryptEnum { get; private set; }
+ }
+}
diff --git a/src/JT809.Protocol/ProtocolPacket/Version.cs b/src/JT809.Protocol/ProtocolPacket/Version.cs
new file mode 100644
index 0000000..6801953
--- /dev/null
+++ b/src/JT809.Protocol/ProtocolPacket/Version.cs
@@ -0,0 +1,46 @@
+namespace JT809.Protocol.ProtocolPacket
+{
+ ///
+ /// 协议版本好标识,上下级平台之间采用的标准协议版编号;
+ /// 长度为 3 个字节来表示,
+ /// 0x01 0x02 0x0F 标识的版本号是 v1.2.15,以此类推。
+ ///
+ public class Version
+ {
+ public byte[] Buffer { get; } = new byte[3];
+ private const int MajorIndex = 0;
+ private const int MinorIndex = 1;
+ private const int BuildIndex = 2;
+ public byte Major
+ {
+ get { return Buffer[MajorIndex]; }
+ private set { Buffer[MajorIndex] = value; }
+ }
+ public byte Minor
+ {
+ get { return Buffer[MinorIndex]; }
+ private set { Buffer[MinorIndex] = value; }
+ }
+ public byte Build
+ {
+ get { return Buffer[BuildIndex]; }
+ private set { Buffer[BuildIndex] = value; }
+ }
+ public Version()
+ {
+ Major = 1;
+ Minor = 0;
+ Build = 0;
+ }
+ public Version(byte major, byte minor, byte buid)
+ {
+ Major = major;
+ Minor = minor;
+ Build = buid;
+ }
+ public override string ToString()
+ {
+ return $"{Major}.{Minor}.{Build}";
+ }
+ }
+}