diff --git a/Sources/XXClient/Helpers/ConvertJsonNumberToString.swift b/Sources/XXClient/Helpers/ConvertJsonNumberToString.swift
index 293f1ca640c4c69fc3e3958329b51671ff6b3508..8390ba1ced0f8a0aff92287b899a81fca0247c77 100644
--- a/Sources/XXClient/Helpers/ConvertJsonNumberToString.swift
+++ b/Sources/XXClient/Helpers/ConvertJsonNumberToString.swift
@@ -17,3 +17,21 @@ func convertJsonNumberToString(
   }
   return output
 }
+
+func convertJsonNumberToString(
+  in input: Data,
+  minNumberLength: Int
+) -> Data {
+  guard var string = String(data: input, encoding: .utf8) else {
+    return input
+  }
+  string = string.replacingOccurrences(
+    of: #":( *)([0-9]{\#(minNumberLength),})( *)(,*)"#,
+    with: #":$1"$2"$3$4"#,
+    options: [.regularExpression]
+  )
+  guard let output = string.data(using: .utf8) else {
+    return input
+  }
+  return output
+}
diff --git a/Sources/XXClient/Models/DHKey.swift b/Sources/XXClient/Models/DHKey.swift
deleted file mode 100644
index 69380ede4069535867cfc0a65a3ca77c6fca5b1f..0000000000000000000000000000000000000000
--- a/Sources/XXClient/Models/DHKey.swift
+++ /dev/null
@@ -1,23 +0,0 @@
-import Foundation
-
-public struct DHKey: Equatable {
-  public init(value: String, fingerprint: UInt64) {
-    self.value = value
-    self.fingerprint = fingerprint
-  }
-
-  public var value: String
-  public var fingerprint: UInt64
-}
-
-extension DHKey: Decodable {
-  enum CodingKeys: String, CodingKey {
-    case value = "Value"
-    case fingerprint = "Fingerprint"
-  }
-
-  public static func decode(_ data: Data) throws -> Self {
-    let data = convertJsonNumberToString(in: data, at: "Value")
-    return try JSONDecoder().decode(Self.self, from: data)
-  }
-}
diff --git a/Sources/XXClient/Models/GroupMember.swift b/Sources/XXClient/Models/GroupMember.swift
index b08d71c250c9af5d4c6ca504dda9fc8586117eb5..8ce7120a58880ab94f9f8a590ad6872565684bfd 100644
--- a/Sources/XXClient/Models/GroupMember.swift
+++ b/Sources/XXClient/Models/GroupMember.swift
@@ -1,30 +1,27 @@
 import Foundation
 
 public struct GroupMember: Equatable {
-  public init(id: Data, dhKey: DHKey) {
+  public init(id: Data) {
     self.id = id
-    self.dhKey = dhKey
   }
 
   public var id: Data
-  public var dhKey: DHKey
 }
 
 extension GroupMember: Decodable {
   enum CodingKeys: String, CodingKey {
     case id = "ID"
-    case dhKey = "DhKey"
   }
 
   public static func decode(_ data: Data) throws -> Self {
-    let data = convertJsonNumberToString(in: data, at: "Value")
+    let data = convertJsonNumberToString(in: data, minNumberLength: 19)
     return try JSONDecoder().decode(Self.self, from: data)
   }
 }
 
 extension Array where Element == GroupMember {
   public static func decode(_ data: Data) throws -> Self {
-    let data = convertJsonNumberToString(in: data, at: "Value")
+    let data = convertJsonNumberToString(in: data, minNumberLength: 19)
     return try JSONDecoder().decode(Self.self, from: data)
   }
 }
diff --git a/Tests/XXClientTests/Helpers/ConvertJsonNumberToStringTests.swift b/Tests/XXClientTests/Helpers/ConvertJsonNumberToStringTests.swift
index db3a4b2edc77a81ae493a03b9294389ff7c6a203..4fc1ecd7f1b729f65f934d11adcac502c0127cf4 100644
--- a/Tests/XXClientTests/Helpers/ConvertJsonNumberToStringTests.swift
+++ b/Tests/XXClientTests/Helpers/ConvertJsonNumberToStringTests.swift
@@ -59,6 +59,28 @@ final class ConvertJsonNumberToStringTests: XCTestCase {
       }
       """
     )
+
+    assert(
+      input: """
+      {
+        "text": "hello",
+        "number1": 123456789,
+        "number2": 1234567890,
+        "number3": 123456789,
+        "number4": 1234567890
+      }
+      """,
+      minNumberLength: 10,
+      expected: """
+      {
+        "text": "hello",
+        "number1": 123456789,
+        "number2": "1234567890",
+        "number3": 123456789,
+        "number4": "1234567890"
+      }
+      """
+    )
   }
 }
 
@@ -82,3 +104,24 @@ private func assert(
     line: line
   )
 }
+
+private func assert(
+  input: String,
+  minNumberLength: Int,
+  expected: String,
+  file: StaticString = #file,
+  line: UInt = #line
+) {
+  XCTAssertNoDifference(
+    String(
+      data: convertJsonNumberToString(
+        in: input.data(using: .utf8)!,
+        minNumberLength: minNumberLength
+      ),
+      encoding: .utf8
+    )!,
+    expected,
+    file: file,
+    line: line
+  )
+}
diff --git a/Tests/XXClientTests/Models/DHKeyTests.swift b/Tests/XXClientTests/Models/DHKeyTests.swift
deleted file mode 100644
index 380d69edb5a1536c6277dbc82dd8b01f65388ca3..0000000000000000000000000000000000000000
--- a/Tests/XXClientTests/Models/DHKeyTests.swift
+++ /dev/null
@@ -1,23 +0,0 @@
-import CustomDump
-import XCTest
-@testable import XXClient
-
-final class DHKeyTests: XCTestCase {
-  func testCoding() throws {
-    let value = "1759426033802606996617132861414734059978289057332806031357800676138355264622676606691435603603751978195460163638145821347601916259127578968570412642641025630452893097179266022832268525346700655861033031712000288680395716922501450233258587788020541937373196899001184700899008948530359980753630443486308876999029238453979779103124291315202352475056237021681172884599194016245219278368648568458514708567045834427853469072638665888791358582182353417065794210125797368093469194927663862565508608719835557592421245749381164023134450699040591219966988201315627676532245052123725278573237006510683695959381015415110970848376498637637944431576313526294020390694483472829278364602405292767170719547347485307956614210210673321959886410245334772057212077704024337636501108566655549055129066343309591274727538343075929837698653965640646190405582788894021694347212874155979958144038307500444865955516612526623220973497735316081265793063949"
-    let fingerprint: UInt64 = 15989433043166758754
-    let jsonString = """
-    {
-      "Value": \(value),
-      "Fingerprint": \(fingerprint)
-    }
-    """
-    let jsonData = jsonString.data(using: .utf8)!
-    let model = try DHKey.decode(jsonData)
-
-    XCTAssertNoDifference(model, DHKey(
-      value: value,
-      fingerprint: fingerprint
-    ))
-  }
-}
diff --git a/Tests/XXClientTests/Models/GroupMemberTests.swift b/Tests/XXClientTests/Models/GroupMemberTests.swift
index a682dfe97ca7c707845c678dca6cba006e4adf5a..36e178c08f37b0bec719f4c3b7747043a9920491 100644
--- a/Tests/XXClientTests/Models/GroupMemberTests.swift
+++ b/Tests/XXClientTests/Models/GroupMemberTests.swift
@@ -5,14 +5,12 @@ import XCTest
 final class GroupMemberTests: XCTestCase {
   func testCoding() throws {
     let idB64 = "U4x/lrFkvxuXu59LtHLon1sUhPJSCcnZND6SugndnVID"
-    let dhKeyValue = "1759426033802606996617132861414734059978289057332806031357800676138355264622676606691435603603751978195460163638145821347601916259127578968570412642641025630452893097179266022832268525346700655861033031712000288680395716922501450233258587788020541937373196899001184700899008948530359980753630443486308876999029238453979779103124291315202352475056237021681172884599194016245219278368648568458514708567045834427853469072638665888791358582182353417065794210125797368093469194927663862565508608719835557592421245749381164023134450699040591219966988201315627676532245052123725278573237006510683695959381015415110970848376498637637944431576313526294020390694483472829278364602405292767170719547347485307956614210210673321959886410245334772057212077704024337636501108566655549055129066343309591274727538343075929837698653965640646190405582788894021694347212874155979958144038307500444865955516612526623220973497735316081265793063949"
-    let dhKeyFingerprint: UInt64 = 15989433043166758754
     let jsonString = """
     {
       "ID": "\(idB64)",
       "DhKey": {
-        "Value": \(dhKeyValue),
-        "Fingerprint": \(dhKeyFingerprint)
+        "Value": 1759426033802606996617132861414734059978289057332806031357800676138355264622676606691435603603751978195460163638145821347601916259127578968570412642641025630452893097179266022832268525346700655861033031712000288680395716922501450233258587788020541937373196899001184700899008948530359980753630443486308876999029238453979779103124291315202352475056237021681172884599194016245219278368648568458514708567045834427853469072638665888791358582182353417065794210125797368093469194927663862565508608719835557592421245749381164023134450699040591219966988201315627676532245052123725278573237006510683695959381015415110970848376498637637944431576313526294020390694483472829278364602405292767170719547347485307956614210210673321959886410245334772057212077704024337636501108566655549055129066343309591274727538343075929837698653965640646190405582788894021694347212874155979958144038307500444865955516612526623220973497735316081265793063949,
+        "Fingerprint": 15989433043166758754
       }
     }
     """
@@ -20,11 +18,7 @@ final class GroupMemberTests: XCTestCase {
     let model = try GroupMember.decode(jsonData)
 
     XCTAssertNoDifference(model, GroupMember(
-      id: Data(base64Encoded: idB64)!,
-      dhKey: DHKey(
-        value: dhKeyValue,
-        fingerprint: dhKeyFingerprint
-      )
+      id: Data(base64Encoded: idB64)!
     ))
 
     let jsonArrayString = "[\(jsonString)]"