[英]iPhone / ios development - best way to check if password is secure enough?
[英]Is strncpy secure for iPhone development?
對於iPhone開發, strncpy()
安全嗎?
如果不是,那么建議使用哪種更好的String API以確保安全?
如果您知道strncpy()
的局限性,那就可以了。 我避免使用它是因為我不喜歡它的局限性,它有兩個方面:
這意味着如果您編寫:
char little[10];
char large[20480];
strncpy(little, sizeof(little), "abcdefghijklmnopqrstuvwxyz");
strncpy(large, sizeof(large), "abcdefghijklmnopqrstuvwxyz");
然后,即使沒有發生緩沖區溢出, little
是一個以空字符結尾的字符串,並且大的字符串有20454個空值被復制到其尾端。 兩者都很麻煩。
strlcpy()
和strlcat()
在iOS上是否可用; 它們在Mac OS X上。 如果您使用C ++進行編碼,則根本不應該使用C字符串,或者僅在系統服務需要使用的最有限的情況下使用C字符串,然后才應該具有使用C ++字符串的Cover函數(內聯)。並將somestring.c_str()
值傳遞給系統服務。
如果在Objective-C中進行編碼,則將使用NS *字符串。
因此,如果您使用C語言進行編碼,請僅考慮strncpy()
。
我有一篇論文(我並沒有主張新穎性,而是從別人那里收集了這個想法):
strcpy()
,則只能安全地使用strcpy()
, strncpy()
, strcat()
和strncat()
之類的函數。重新調用—很快,傳遞給strncat()
的長度代表什么? (1) )。 strcpy()
類的函數; 您可以使用memmove()
(或memcpy()
)。 (1)長度是考慮到當前字符串后目標緩沖區中的可用空間。 因此,要使用strncat()
,您必須知道字符串在目標字符串中的長度以及可用的總長度,以便您可以讓strncat()
跳過字符串的初始段,然后連接一些字符串或所有第二個字符串。 但是,如果您知道這一點,則可以使用:
strncpy(target + curr_target_strlen, source, target_size - curr_target_strlen);
這將是“更有效的”,因為它不涉及跳過字符串的前導部分(順便說一句,如果您要構建帶有許多strncat()
或strcat()
操作的長字符串,則可能導致二次行為)。 或者,如果您知道所有大小,則可以使用memmove()
:
size_t copy_length = target_size - curr_target_strlen;
if (copy_length > source_strlen)
copy_length = source_strlen + 1;
memmove(target + curr_target_strlen, source, copy_length);
而且,除非我一時沖動編寫的代碼出現一個錯誤,否則可以避免strncat()
大多數問題。 如果您始終使用strncat()
,並且第一個參數指向字符串末尾的null,則它有其用途(並且可以在匯編程序中進行優化。否則,這不是一個好選擇-IMNSHO。
指定安全性的含義,無論如何,在iPhone上的strncpy
都與在其他平台上一樣安全。
由於您需要strncpy
我想您不是在使用NSString
所以使用它不會出現任何問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.