它可以知道,如果一个字符串连接用base64 codeD? [英] It is possible to know if a string is encoded in base64?

查看:224
本文介绍了它可以知道,如果一个字符串连接用base64 codeD?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

就这么简单。

我正在做用户具有扫描QR code(这基本上是一个base64连接codeD字符串)的应用程序,有没有什么办法来验证字符串连接codeD在去之前,code Base64和跟踪应用程序的流量?

我的code将负责是:

  FUNC captureOutput(captureOutput:AVCaptureOutput!didOutputMetadataObjects metadataObjects:[AnyObject]!fromConnection连接:AVCaptureConnection){    如果metadataObjects == ||为零metadataObjects.count == 0 {
        QR codeFrameView?.frame = CGRectZero
        返回
    }    让metadataObj = metadataObjects [0]作为AVMetadataMachineReadable $ C $的CObject    如果metadataObj.type == AVMetadataObjectTypeQR code {
        让酒吧$ C $的CObject =视频previewLayer?.transformedMetadataObjectForMetadataObject(metadataObj作为AVMetadataMachineReadable codeObject的)作为AVMetadataMachineReadable $ C $的CObject
        QR codeFrameView?.frame =栏codeObject.bounds        如果metadataObj.stringValue!=零/ *验证字符串是基地64前继续* / {
            让德codedData =的NSData(base64En codedString:metadataObj.stringValue,选择:NSDataBase64DecodingOptions.IgnoreUnknownCharacters)
            让德codedString =的NSString(数据:德codedData !,编码:NSUTF8StringEncoding)
            的println(德codedString)
        }        / *更code * /    }
}


解决方案

您可以使用常规的前pression检查一个字符串匹配base64编码与否,是这样的:

  ^([A-ZA-Z0-9 + /] {4})*([A-ZA-Z0-9 + /] {4} | [A-ZA -z0-9 + /] {3} = | [A-ZA-Z0-9 + /] {2} ==)$

在base64编码,字符集是[包括AZ,az,0-9和+ /],如果剩下的长度小于4,填写的'='字符。

^([A-ZA-Z0-9 + /] {4})* 表示字符串从0开始的时间或更多的base64组。

([A-ZA-Z0-9 + /] {4} | [A-ZA-Z0-9 + /] {3} = | [A-ZA-Z0-9 + /] {2} ==)表示字符串必须以 [A-ZA-Z0-9 + /] {4} 或 [A-ZA-Z0-9 + /] {3} = [A-ZA-Z0-9 + /] {2 } ==

基本规则是:


  • 检查长度为4个字符的倍数

  • 检查每一个字符是集合A-Z,A-Z,0-9,+,/除了
    在它是0,1或2'='字符
  • 末填充

Simple as that.

I'm making an app where the user has to scan a QR code (which basically is a base64 encoded string), is there any way to verify that the string is encoded in base64 before decode and follow the flow of the application?

My code would be responsible for that is:

func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) {

    if metadataObjects == nil || metadataObjects.count == 0 {
        qrCodeFrameView?.frame = CGRectZero
        return
    }

    let metadataObj = metadataObjects[0] as AVMetadataMachineReadableCodeObject

    if metadataObj.type == AVMetadataObjectTypeQRCode {
        let barCodeObject = videoPreviewLayer?.transformedMetadataObjectForMetadataObject(metadataObj as AVMetadataMachineReadableCodeObject) as AVMetadataMachineReadableCodeObject
        qrCodeFrameView?.frame = barCodeObject.bounds

        if metadataObj.stringValue != nil /* Verify that string is base 64 before continue */ {
            let decodedData = NSData(base64EncodedString: metadataObj.stringValue, options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters)
            let decodedString = NSString(data: decodedData!, encoding: NSUTF8StringEncoding)
            println(decodedString)
        }

        /* More code */

    }
}

解决方案

You can use the regular expression to check a string match base64 encoding or not, like this:

^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$

In base64 encoding, the character set is [A-Z,a-z,0-9,and + /], if rest length is less than 4, fill of '=' character.

^([A-Za-z0-9+/]{4})* means the String start with 0 time or more base64 group.

([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==) means the String must end of 3 forms in [A-Za-z0-9+/]{4} or [A-Za-z0-9+/]{3}= or [A-Za-z0-9+/]{2}==

Basic Rule is:

  • Check that the length is a multiple of 4 characters
  • Check that every character is in the set A-Z, a-z, 0-9, +, / except for padding at the end which is 0, 1 or 2 '=' characters

这篇关于它可以知道,如果一个字符串连接用base64 codeD?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆