public JT809GlobalConfig() { EncryptOptions = new JT809EncryptOptions() { IA1 = 20000000, IC1 = 20000000, M1 = 30000000 }; }
public byte[] Encrypt(ReadOnlySpan <byte> buffer, JT809EncryptOptions encryptOptions, uint privateKey) { byte[] data = new byte[buffer.Length]; if (0 == privateKey) { privateKey = 1; } uint mkey = encryptOptions.M1; if (0 == mkey) { mkey = 1; } for (int idx = 0; idx < buffer.Length; idx++) { privateKey = encryptOptions.IA1 * (privateKey % mkey) + encryptOptions.IC1; byte tmp = buffer[idx]; tmp ^= (byte)((privateKey >> 20) & 0xFF); data[idx] = tmp; } return(data); }
/// <summary> /// 设置加密算法选项值 /// 不同的上下级平台之间,加密的算法是一致的,但是针对 M1, IA1, IC1 的不同。 /// 数据先经过加密而后解密。 /// </summary> /// <param name="jT809Encrypt"></param> /// <returns></returns> public JT809GlobalConfig SetEncryptOptions(JT809EncryptOptions jT809EncryptOptions) { instance.Value.Encrypt = new JT809EncryptImpl(jT809EncryptOptions); instance.Value.EncryptOptions = jT809EncryptOptions; return(instance.Value); }
public byte[] Decrypt(ReadOnlySpan <byte> buffer, JT809EncryptOptions encryptOptions, uint privateKey) { return(Encrypt(buffer, encryptOptions, privateKey)); }
public JT809EncryptImpl(JT809EncryptOptions jT809EncryptOptions) { this.jT809EncryptOptions = jT809EncryptOptions; }