回答編集履歴
6
誤植修正
test
CHANGED
@@ -112,7 +112,7 @@
|
|
112
112
|
|
113
113
|
|
114
114
|
|
115
|
-
[int o
|
115
|
+
[int ord(string $string)](http://php.net/manual/ja/function.ord.php)
|
116
116
|
|
117
117
|
|
118
118
|
|
5
補足の…以下略
test
CHANGED
@@ -136,7 +136,7 @@
|
|
136
136
|
|
137
137
|
|
138
138
|
|
139
|
-
※コマンドラインでこんな事を数回繰り返してみると、ランダムな数字が10個生成されるのがわかります。バイト文字なので、0から255までのランダムな数字になります。
|
139
|
+
※コマンドラインでこんな事を数回繰り返してみると、ランダムな数字が10個生成されていて、それが得られるのがわかります。バイト文字なので、0から255までのランダムな数字になります。
|
140
140
|
|
141
141
|
```
|
142
142
|
|
4
補足の補足の補足の位置修正
test
CHANGED
@@ -100,6 +100,42 @@
|
|
100
100
|
|
101
101
|
|
102
102
|
|
103
|
+
で、ここではランダムなバイト文字列を生成しただけなので、使用して良い文字とかは全く考慮されていないです。
|
104
|
+
|
105
|
+
|
106
|
+
|
107
|
+
ですから、最初に定義してある$chars配列の要素をこのランダムさを利用して必要文字数分だけ取り出そう、というわけです。
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
$bytesは長さ$lengthのバイト文字列だったので、for文を使って$bytesの最初の文字から最後の文字までを1つずつ取り出し、ord()します。
|
112
|
+
|
113
|
+
|
114
|
+
|
115
|
+
[int old(string $string)](http://php.net/manual/ja/function.ord.php)
|
116
|
+
|
117
|
+
|
118
|
+
|
119
|
+
$stringで渡された文字列の最初の1文字目のASCIIコードを**整数で**返す関数です。
|
120
|
+
|
121
|
+
|
122
|
+
|
123
|
+
> ordで先頭を指定する必要はないのではないのでしょうか?
|
124
|
+
|
125
|
+
|
126
|
+
|
127
|
+
についてですが、ここでord()を使っている意図は先頭を取り出すことにあるのではなく、**ランダムな整数** を得る事にあります。
|
128
|
+
|
129
|
+
|
130
|
+
|
131
|
+
> 取り出された要素は一つしかない以上、その要素は必ず先頭になるので
|
132
|
+
|
133
|
+
|
134
|
+
|
135
|
+
についてですが、ord()に渡しているのは$bytesではなく **$bytes[$i]** つまり文字列ではなくバイト文字1文字であって、for()ループの毎に、0文字目から最後の文字まで1文字ずつ変わっていくわけです。
|
136
|
+
|
137
|
+
|
138
|
+
|
103
139
|
※コマンドラインでこんな事を数回繰り返してみると、ランダムな数字が10個生成されるのがわかります。バイト文字なので、0から255までのランダムな数字になります。
|
104
140
|
|
105
141
|
```
|
@@ -130,42 +166,6 @@
|
|
130
166
|
|
131
167
|
|
132
168
|
|
133
|
-
で、ここではランダムなバイト文字列を生成しただけなので、使用して良い文字とかは全く考慮されていないです。
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
ですから、最初に定義してある$chars配列の要素をこのランダムさを利用して必要文字数分だけ取り出そう、というわけです。
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
$bytesは長さ$lengthのバイト文字列だったので、for文を使って$bytesの最初の文字から最後の文字までを1つずつ取り出し、ord()します。
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
[int old(string $string)](http://php.net/manual/ja/function.ord.php)
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
$stringで渡された文字列の最初の1文字目のASCIIコードを**整数で**返す関数です。
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
> ordで先頭を指定する必要はないのではないのでしょうか?
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
についてですが、ここでord()を使っている意図は先頭を取り出すことにあるのではなく、**ランダムな整数** を得る事にあります。
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
> 取り出された要素は一つしかない以上、その要素は必ず先頭になるので
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
についてですが、ord()に渡しているのは$bytesではなく **$bytes[$i]** つまり文字列ではなくバイト文字1文字であって、for()ループの毎に、0文字目から最後の文字まで1文字ずつ変わっていくわけです。
|
166
|
-
|
167
|
-
|
168
|
-
|
169
169
|
さて、これで、ランダムな整数が取得できました。それがこの太字の部分です。
|
170
170
|
|
171
171
|
|
3
補足の補足の補足
test
CHANGED
@@ -100,7 +100,7 @@
|
|
100
100
|
|
101
101
|
|
102
102
|
|
103
|
-
※コマンドラインでこんな事を数回繰り返してみると、ランダムな数字が10個生成されるのがわかります。
|
103
|
+
※コマンドラインでこんな事を数回繰り返してみると、ランダムな数字が10個生成されるのがわかります。バイト文字なので、0から255までのランダムな数字になります。
|
104
104
|
|
105
105
|
```
|
106
106
|
|
2
補足の補足
test
CHANGED
@@ -100,6 +100,36 @@
|
|
100
100
|
|
101
101
|
|
102
102
|
|
103
|
+
※コマンドラインでこんな事を数回繰り返してみると、ランダムな数字が10個生成されるのがわかります。
|
104
|
+
|
105
|
+
```
|
106
|
+
|
107
|
+
# php -r "$bytes = openssl_random_pseudo_bytes(10); for($i=0; $i < strlen($bytes); $i++){ echo ord($bytes[$i]) . \"\n\"; }"
|
108
|
+
|
109
|
+
130
|
110
|
+
|
111
|
+
160
|
112
|
+
|
113
|
+
69
|
114
|
+
|
115
|
+
116
|
116
|
+
|
117
|
+
180
|
118
|
+
|
119
|
+
250
|
120
|
+
|
121
|
+
89
|
122
|
+
|
123
|
+
198
|
124
|
+
|
125
|
+
21
|
126
|
+
|
127
|
+
248
|
128
|
+
|
129
|
+
```
|
130
|
+
|
131
|
+
|
132
|
+
|
103
133
|
で、ここではランダムなバイト文字列を生成しただけなので、使用して良い文字とかは全く考慮されていないです。
|
104
134
|
|
105
135
|
|
1
補足
test
CHANGED
@@ -27,6 +27,42 @@
|
|
27
27
|
```PHP
|
28
28
|
|
29
29
|
echo generateSecureRandomString(15, 'abcde_!#$@') . '</p>';
|
30
|
+
|
31
|
+
```
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
結果はこんなんになっています。
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
```PHP
|
40
|
+
|
41
|
+
Array
|
42
|
+
|
43
|
+
(
|
44
|
+
|
45
|
+
[0] => a
|
46
|
+
|
47
|
+
[1] => b
|
48
|
+
|
49
|
+
[2] => c
|
50
|
+
|
51
|
+
[3] => d
|
52
|
+
|
53
|
+
[4] => e
|
54
|
+
|
55
|
+
[5] => _
|
56
|
+
|
57
|
+
[6] => !
|
58
|
+
|
59
|
+
[7] => #
|
60
|
+
|
61
|
+
[8] => $
|
62
|
+
|
63
|
+
[9] => @
|
64
|
+
|
65
|
+
)
|
30
66
|
|
31
67
|
```
|
32
68
|
|
@@ -154,4 +190,4 @@
|
|
154
190
|
|
155
191
|
|
156
192
|
|
157
|
-
パターンに空文字列( **//** )を指定しているので、結果は、文字が1文字ごとにバラバラにされた配列として得られます。
|
193
|
+
パターンに空文字列( **//** )を指定しているので特定の文字・パターンに関係なく区切られ、結果は、文字が1文字ごとにバラバラにされた配列として得られます。
|