tradle / react-native-crypto

partial implementation of node's `crypto` for react-native
MIT License
370 stars 84 forks source link

Error secure random number generation not supported by this browser use chrome, FireFox or Internet Explorer 1 #59

Open congnt148 opened 4 years ago

congnt148 commented 4 years ago

Hi. I use 'crypto.publicEncrypt' in my code RN. Android test, release and Ios test word good, but IOS release error 'Error secure random number generation not supported by this browser use chrome, FireFox or Internet Explorer 1'

System: React-native-cli: 2.0.1 React-native: 0.61.5 Node: v12.11.1

My code: RNRandomBytes.randomBytes(24, (err, bytes) => { const randomAESkey = bytes const sha256Pass = CryptoJS.HmacSHA256(password, Config.SHARE_KEY) const key = CryptoJS.enc.Base64.parse(randomAESkey) let iv = new Buffer(randomAESkey, 'base64').slice(0, 16).toString('base64') iv = CryptoJS.enc.Base64.parse(iv) const aes256Pass = CryptoJS.AES.encrypt(sha256Pass, key, { iv: iv, mode: CryptoJS.mode.CBC, }) const deviceId = DeviceInfo.getUniqueId() const RSA_PKCS1_PADDING = 1 console.log('Buffer.from(randomAESkey) ', Buffer.from(randomAESkey)) const enc = crypto.publicEncrypt( --> Begin error { key: Config.APP_PUBLIC_KEY, padding: RSA_PKCS1_PADDING, }, Buffer.from(randomAESkey), ) const data = { Password: aes256Pass.toString(), UserName: (registerOrLoginState && registerOrLoginState.Phone) || '', IsProvideKey: true, Imei: deviceId, EncryptKey: enc.toString('base64'), SessionId: '', DeviceType: Platform.OS.toUpperCase(), } }