2017-08-22 6 views
0

Swiftのユーザーパスワードからデータを生成する必要があります。私は現在、使用しています:文字列からデータを生成する方法

let password = "replace_it_for_smt_related_to_the_user" 
var securityKey:Data! = Data() 
securityKey = self.password.data(using: .utf16, allowLossyConversion: true)?.subdata(in: 0...32) 

しかし、その後、ライブラリでそれを使用して、私はエラーを取得する:「securityKeyは256ビットでなければなりません」。 私は実際にエンコーディングタイプを気にしませんが、私は256ビットの文字列からDataを作成する必要があります。どんな助け?延長の

おかげ

+0

256ビットが '8分の256 = 32 bytes'に等しいです。 ASCIIエンコーディング(1文字あたり1バイト)を使用する場合、文字列は32文字のASCII文字でなければなりません。 'UTF-8'エンコーディングを使用すると、1バイトから4バイトの任意の文字が使用できます。したがって、正しい長さの 'Data'を作成するためにパスワードが何であるかによって異なります。このケースでは、ハッシュして「データ」に変換したときのパスワードが正しい長さになるように、パスワードを32バイトの固定サイズにハッシュする必要があります。 [128ビットMD5ハッシュは16進数で表現すると32ビットのハッシュを生成します](https://stackoverflow.com/a/6317289/1305067)。 – paulvs

+0

'サブデータ(in:0 ... 32)'は** 33 **バイト= 264ビットを抽出します。おそらく 'サブデータ(in:0 .. <32)'を意味していたでしょうか? –

+0

@ MartinRそれはおそらく一つの問題でした。私は以下の答えで解決しましたが、とにかく感謝します。 –

答えて

1

メイクの使用:

extension String{ 
//convert base64 string to string 
    func decodeToBase64() -> String { 
    return Data(self.utf8).base64EncodedString() 
    } 

//convert string to base64 String 
func encodeFromBase64() -> String? { 
    guard let data = Data(base64Encoded: self) else { 
     return nil 
    } 
    return String(data: data, encoding: .utf8) 
    } 

} 

それを使用する方法:

let pwdStr = "replace_it_for_smt_related_to_the_user".decodeToBase64()//use extension method 
print(pwdStr) 
関連する問題