diff --git a/trie/trie_test.go b/trie/trie_test.go
index 60307dba8c361d69ee2426d9bd5adc82df080523..01ae3a4e7b09b735529a9ff472bea555e188a677 100644
--- a/trie/trie_test.go
+++ b/trie/trie_test.go
@@ -377,7 +377,7 @@ func (randTest) Generate(r *rand.Rand, size int) reflect.Value {
 		if len(allKeys) < 2 || r.Intn(100) < 10 {
 			// new key
 			key := make([]byte, r.Intn(50))
-			randRead(r, key)
+			r.Read(key)
 			allKeys = append(allKeys, key)
 			return key
 		}
@@ -401,22 +401,6 @@ func (randTest) Generate(r *rand.Rand, size int) reflect.Value {
 	return reflect.ValueOf(steps)
 }
 
-// rand.Rand provides a Read method in Go 1.7 and later, but
-// we can't use it yet.
-func randRead(r *rand.Rand, b []byte) {
-	pos := 0
-	val := 0
-	for n := 0; n < len(b); n++ {
-		if pos == 0 {
-			val = r.Int()
-			pos = 7
-		}
-		b[n] = byte(val)
-		val >>= 8
-		pos--
-	}
-}
-
 func runRandTest(rt randTest) bool {
 	db, _ := ethdb.NewMemDatabase()
 	tr, _ := New(common.Hash{}, db)
diff --git a/whisper/whisperv5/filter_test.go b/whisper/whisperv5/filter_test.go
index d69fb40dbfee43e084e39a501f0ad224864e81f8..1cf85b8d7ed461a7dfe1dff258c293f5eda5c2e2 100644
--- a/whisper/whisperv5/filter_test.go
+++ b/whisper/whisperv5/filter_test.go
@@ -18,7 +18,7 @@ package whisperv5
 
 import (
 	"math/big"
-	"math/rand"
+	mrand "math/rand"
 	"testing"
 	"time"
 
@@ -33,12 +33,12 @@ var seed int64
 // reproduciblity independent of their sequence.
 func InitSingleTest() {
 	seed = time.Now().Unix()
-	rand.Seed(seed)
+	mrand.Seed(seed)
 }
 
 func InitDebugTest(i int64) {
 	seed = i
-	rand.Seed(seed)
+	mrand.Seed(seed)
 }
 
 type FilterTestCase struct {
@@ -55,7 +55,7 @@ func generateFilter(t *testing.T, symmetric bool) (*Filter, error) {
 	const topicNum = 8
 	f.Topics = make([]TopicType, topicNum)
 	for i := 0; i < topicNum; i++ {
-		randomize(f.Topics[i][:])
+		mrand.Read(f.Topics[i][:])
 		f.Topics[i][0] = 0x01
 	}
 
@@ -68,7 +68,7 @@ func generateFilter(t *testing.T, symmetric bool) (*Filter, error) {
 
 	if symmetric {
 		f.KeySym = make([]byte, 12)
-		randomize(f.KeySym)
+		mrand.Read(f.KeySym)
 		f.SymKeyHash = crypto.Keccak256Hash(f.KeySym)
 	} else {
 		f.KeyAsym, err = crypto.GenerateKey()
@@ -87,7 +87,7 @@ func generateTestCases(t *testing.T, SizeTestFilters int) []FilterTestCase {
 	for i := 0; i < SizeTestFilters; i++ {
 		f, _ := generateFilter(t, true)
 		cases[i].f = f
-		cases[i].alive = (rand.Int()&int(1) == 0)
+		cases[i].alive = (mrand.Int()&int(1) == 0)
 	}
 	return cases
 }
@@ -147,7 +147,7 @@ func TestComparePubKey(t *testing.T) {
 	}
 
 	// generate key3 == key1
-	rand.Seed(seed)
+	mrand.Seed(seed)
 	key3, err := crypto.GenerateKey()
 	if err != nil {
 		t.Fatalf("failed to generate third key with seed %d: %s.", seed, err)
@@ -193,7 +193,7 @@ func TestMatchEnvelope(t *testing.T) {
 	}
 
 	// encrypt symmetrically
-	i := rand.Int() % 4
+	i := mrand.Int() % 4
 	fsym.Topics[i] = params.Topic
 	fasym.Topics[i] = params.Topic
 	msg = NewSentMessage(params)
@@ -544,7 +544,7 @@ func TestWatchers(t *testing.T) {
 
 	var envelopes [NumMessages]*Envelope
 	for i = 0; i < NumMessages; i++ {
-		j = rand.Uint32() % NumFilters
+		j = mrand.Uint32() % NumFilters
 		e = generateCompatibeEnvelope(t, tst[j].f)
 		envelopes[i] = e
 		tst[j].msgCnt++
@@ -597,7 +597,7 @@ func TestWatchers(t *testing.T) {
 	envelopes[0] = e
 	tst[0].msgCnt++
 	for i = 1; i < NumMessages; i++ {
-		j = rand.Uint32() % NumFilters
+		j = mrand.Uint32() % NumFilters
 		e = generateCompatibeEnvelope(t, tst[j].f)
 		envelopes[i] = e
 		tst[j].msgCnt++
diff --git a/whisper/whisperv5/message.go b/whisper/whisperv5/message.go
index 9677f278e5b89510bddaeda9c56e3c71f4329603..5f964b072ad06fe3969a1514e2a475bfd6a8b925 100644
--- a/whisper/whisperv5/message.go
+++ b/whisper/whisperv5/message.go
@@ -128,7 +128,7 @@ func (msg *SentMessage) appendPadding(params *MessageParams) {
 			panic("please fix the padding algorithm before releasing new version")
 		}
 		buf := make([]byte, padSize)
-		randomize(buf[1:])
+		mrand.Read(buf[1:])
 		buf[0] = byte(padSize)
 		if params.Padding != nil {
 			copy(buf[1:], params.Padding)
@@ -365,19 +365,3 @@ func (msg *ReceivedMessage) hash() []byte {
 	}
 	return crypto.Keccak256(msg.Raw)
 }
-
-// rand.Rand provides a Read method in Go 1.7 and later,
-// but we can't use it yet.
-func randomize(b []byte) {
-	cnt := 0
-	val := mrand.Int63()
-	for n := 0; n < len(b); n++ {
-		b[n] = byte(val)
-		val >>= 8
-		cnt++
-		if cnt >= 7 {
-			cnt = 0
-			val = mrand.Int63()
-		}
-	}
-}
diff --git a/whisper/whisperv5/message_test.go b/whisper/whisperv5/message_test.go
index c6f1ca2caf5bdc26dc241755093d356df7e8e849..1ed7250d3a00608ee96e026ca710841f88b02aaa 100644
--- a/whisper/whisperv5/message_test.go
+++ b/whisper/whisperv5/message_test.go
@@ -18,7 +18,7 @@ package whisperv5
 
 import (
 	"bytes"
-	"math/rand"
+	mrand "math/rand"
 	"testing"
 
 	"github.com/ethereum/go-ethereum/crypto"
@@ -34,13 +34,13 @@ func generateMessageParams() (*MessageParams, error) {
 	// set all the parameters except p.Dst
 
 	buf := make([]byte, 1024)
-	randomize(buf)
-	sz := rand.Intn(400)
+	mrand.Read(buf)
+	sz := mrand.Intn(400)
 
 	var p MessageParams
 	p.PoW = 0.01
 	p.WorkTime = 1
-	p.TTL = uint32(rand.Intn(1024))
+	p.TTL = uint32(mrand.Intn(1024))
 	p.Payload = make([]byte, sz)
 	p.Padding = make([]byte, padSizeLimitUpper)
 	p.KeySym = make([]byte, aesKeyLength)
@@ -132,7 +132,7 @@ func TestMessageEncryption(t *testing.T) {
 
 func TestMessageWrap(t *testing.T) {
 	seed = int64(1777444222)
-	rand.Seed(seed)
+	mrand.Seed(seed)
 	target := 128.0
 
 	params, err := generateMessageParams()
@@ -168,7 +168,7 @@ func TestMessageWrap(t *testing.T) {
 func TestMessageSeal(t *testing.T) {
 	// this test depends on deterministic choice of seed (1976726903)
 	seed = int64(1976726903)
-	rand.Seed(seed)
+	mrand.Seed(seed)
 
 	params, err := generateMessageParams()
 	if err != nil {
@@ -179,8 +179,8 @@ func TestMessageSeal(t *testing.T) {
 	params.TTL = 1
 	aesnonce := make([]byte, 12)
 	salt := make([]byte, 12)
-	randomize(aesnonce)
-	randomize(salt)
+	mrand.Read(aesnonce)
+	mrand.Read(salt)
 
 	env := NewEnvelope(params.TTL, params.Topic, salt, aesnonce, msg)
 	if err != nil {
diff --git a/whisper/whisperv5/whisper_test.go b/whisper/whisperv5/whisper_test.go
index 312dacfc4bfb65cb319f257c29f8e4840f6f2dfe..8d63d443cf1e9464f595f7958afa9e5636a3579d 100644
--- a/whisper/whisperv5/whisper_test.go
+++ b/whisper/whisperv5/whisper_test.go
@@ -18,6 +18,7 @@ package whisperv5
 
 import (
 	"bytes"
+	mrand "math/rand"
 	"testing"
 	"time"
 
@@ -49,7 +50,7 @@ func TestWhisperBasic(t *testing.T) {
 	}
 
 	peerID := make([]byte, 64)
-	randomize(peerID)
+	mrand.Read(peerID)
 	peer, _ := w.getPeer(peerID)
 	if peer != nil {
 		t.Fatal("found peer for random key.")
@@ -212,7 +213,7 @@ func TestWhisperSymKeyManagement(t *testing.T) {
 
 	// add existing id, nothing should change
 	randomKey := make([]byte, 16)
-	randomize(randomKey)
+	mrand.Read(randomKey)
 	err = w.AddSymKey(id1, randomKey)
 	if err == nil {
 		t.Fatalf("failed AddSymKey with seed %d.", seed)