2015-10-22 132 views
-2

我試圖減少串這樣的尺寸:如何減少字符串的長度?

'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE0NDU0OTk3NDUsImQiOnsiYXV0aF9kYXRhIjoiZm9vIiwib3RoZXJfYXV0aF9kYXRhIjoiYmFyIiwidWlkIjoidW5pcXVlSWQxIn0sInYiOjB9.h6LV3boj0ka2PsyOjZJb8Q48ugiHlEkNksusRGtcUBk' 

的東西,有人會喜歡這類型在小於30秒時:

'aF9kYX' 

,並能夠將其回到原來的字符串。我怎麼能做到這一點?

編輯:我想我不清楚,首先我不知道我想要什麼是可能的。 因此,我有我的應用程序要求輸入令牌來登錄,這就是智威湯遜。但是對於某人來說手動輸入的時間太長了。所以我認爲有一種算法可以使這個字符串變小(壓縮它),以便輸入更容易,更快速。這使我的我怎麼會用這樣的算法心中的一個例子是:

short_to_big(small_string) //Returns the original JWT 
big_to_short(JWT_string) //Returns the smaller string 
+1

你只是想存儲一串長字符串,然後檢索它們,或者你想以某種方式壓縮和解壓縮任意字符串? – TigerhawkT3

+0

從第一組到第二組的映射顯然不是1-1,這意味着第二組中將會有一個字符串's',它映射到第一組中的多個字符串。問題是如果給予's',你想要做什麼? –

+0

這似乎是一個JSON Web令牌。你究竟想要完成什麼?無論你在做什麼,你都在降低JWT方案的有效性。 –

回答

-1

好的,所以,因爲我找不到縮小字符串的解決方案,我試圖給它一個不同的方法,並找到了解決方案。

我們解釋,爲什麼我想用令牌登錄,我打算寫什麼,我想我的應用程序來做:

在火力地堡任何人都可以創建一個帳戶,但我不希望那麼,爲此,我創建了一組只能寫入或讀取數據的用戶。

因此,爲了創建一個帳戶,用戶必須申請一個註冊碼(實際上是從Firebase生成的JWT,以便您有權將用戶添加到我正在討論的那個組) 。

這個應用程序是爲本地使用,這意味着只有在這裏生活的人才會使用它。所以,回到原來的問題,對於某人來說,令牌太大(正如我多次說過的),我想知道我是否可以縮小它以及如何縮小。但是,如果沒有成功,我嘗試了一種不同的方法,即生成令牌(來自不同的程序),使用隨機代碼對其進行加密,然後將其上傳到Firebase,這樣我就可以將隨機代碼提供給用戶,以便用戶可以鍵入它在應用程序中,以便它可以檢索和解密令牌並進行身份驗證,以便最終用戶擁有一個有權讀取或寫入數據的帳戶。

感謝您的回覆,如果我浪費了您的時間,我很抱歉。

+0

1.這應該是對你的問題的編輯,而不是回答。 2.您正在重新創建用戶登錄。 – TigerhawkT3

0

愚蠢的答案很簡單:用一個字典來存儲短字符串鍵和一個長的值。然後,您只需按照自己喜歡的方式生成短字符串,並確保它不在字典中。如果您需要保留鍵/值,則幾乎可以使用任何類型的數據庫(sql,key:value,document或甚至csv文件FWIW)。

哦,如果不解決您的問題,那麼你可能需要考慮提供更多的上下文)

-1

UPDATE(後澄清的問題和意見建議)

您可以實現一種算法, 唯一將此大字符串映射到字符串的簡短表示形式並將此映射存儲在字典中。以下算法不保證唯一性但應該給你一些遵循的路徑。

import random 
import string 

def long_string_to_short(original_string, length=10): 
    random.seed(original_string) 
    filling_values = string.digits + string.ascii_letters 
    short_string = ''.join(random.choice(filling_values) for char_ in xrange(length)) 
    return short_string 

當調用該函數時,您可以爲短字符串指定適當的長度。

然後,你可以:

my_mapping_dict = {} 
my_long_string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE0NDU0OTk3NDUsImQiOnsiYXV0aF9kYXRhIjoiZm9vIiwib3RoZXJfYXV0aF9kYXRhIjoiYmFyIiwidWlkIjoidW5pcXVlSWQxIn0sInYiOjB9.h6LV3boj0ka2PsyOjZJb8Q48ugiHlEkNksusRGtcUBk' 
short_string = long_string_to_short(my_long_string) 
my_mapping_dict[short_string] = my_long_string 
+1

我喜歡你隱藏整個實際答案的方式,「完成任務並生成一個簡短的表示形式......」 – jonrsharpe

+1

@jonrsharpe - 你認爲他應該[在步驟2中更加明確](http:/ /star.psy.ohio-state.edu/coglab/Pictures/miracle.gif)? – TigerhawkT3

+0

@ TigerhawkT3是的,它表達完美! – jonrsharpe

0

你需要更多的約束。一個200個字符的字符串比6個字符的字符串包含更多的信息,所以或者需要更多的關於原始字符串的信息(例如,它們來自一些已知的字符串集或者有限的字符集),或者需要存儲原始字符串在某處並使用用戶類型的字符串作爲地圖或類似的鍵。

存在無損壓縮算法,但是這些算法依賴於瞭解關於字符串的一些概率信息(例如重複字符可能),並且如果概率錯誤通常會擴展字符串。