この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 10067|答える: 0

URLセキュアBase64エンコーディング、デコード

[リンクをコピー]
掲載地 2019/11/15 14:10:48 | | |
Base64は2進文字をHTTP伝送用の可視文字にトランスコードできますが、Base64のトランスコーディングはURLによって「+」「/」「=」などの特殊文字を生成し、両者の矛盾が生じます。
送信前にURLをトランスコードしない文字に「+」「/」「=」を置き換え、データを受け取った後にそれらを元に戻し、デコードすることができます。


PHP:

    /**

     * URL base64 デコード

     * '-' -> '+'

     * '_' -> '/'

     * 弦長 %4 の余り、補数 '='

     * @param不明$string

     */

    公開静的関数 urlsafe_b64decode($string) {

        $data = str_replace(array('-','_'),array('+','/'),$string);

        $mod 4 = strlen($data) % 4;

        もし($mod 4) {

            $data .= substr('====', $mod 4);

        }

        リターンbase64_decode($data);

    }

   

    /**

     * URL base64 エンコード

     * '+' -> '-'

     * '/' -> '_'

     * '=' -> ''

     * @param不明$string

     */

    関数 urlsafe_b64encode($string) {

        $data = base64_encode($string);

        $data = str_replace(array('+','/','='),array('-','_',''),$data);

        $dataを返す;

    }




OC:



#pragma - saveBase64エンコーディング中の文字列「-」「_」を「+」「/」とビット補数に変換し、文字列「=」の4倍の長さで変換します。

+(NSData*)safeUrlBase64Decode:(NSString*)safeUrlbase64Str

{

    // '-' -> '+'

    // '_' -> '/'

    長さが4倍未満の場合は、

    NSMutableString * base64Str = [[NSMutableString alloc]initWithString:safeUrlbase64Str];

    base64Str = (NSMutableString * )[base64Str stringByReplacingOccurrencesOfString:@"-" withString:@"+"];

    base64Str = (NSMutableString * )[base64Str stringByReplacingOccurrencesOfString:@"_" withString:@"/"];

    NSInteger mod4 = base64Str.length % 4;

    if(mod4 > 0)

        [base64Str appendString:[@"====" substringToIndex:(4-mod4)]];

    NSLog(@"Base64 オリジナル: %@", base64Str);

    return [GTMBase64 decodeData:[base64Str dataUsingEncoding:NSUTF8StringEncoding]];

   

}



#pragma - Base64エンコーディングは+, /, = これらの安全でないURL文字列を含むため、文字を変更してください

+(NSString*)safeUrlBase64Encode:(NSData*)data

{

    // '+' -> '-'

    // '/' -> '_'

    // '=' -> ''

    NSString * base64Str = [GTMBase64 stringByEncodingData:data];

    NSMutableString * safeBase64Str = [[NSMutableString alloc]initWithString:base64Str];

    safeBase64Str = (NSMutableString * )[safeBase64Str stringByReplacingOccurrencesOfString:@"+" withString:@"-"];

    safeBase64Str = (NSMutableString * )[safeBase64Str stringByReplacingOccurrencesOfString:@"/" withString:@"_"];

    safeBase64Str = (NSMutableString * )[safeBase64Str stringByReplacingOccurrencesOfString:@"=" withString:@""];

    NSLog(@"safeBase64encoded:%@", safeBase64Str);

    安全ベース64Strを返送;

}



Java:

public static 文字列 safeUrlBase64Encode(byte[] data){

文字列 encodeBase64 = new BASE64Encoder().encode(data);

文字列 safeBase64Str = encodeBase64.replace('+', '-');

safeBase64Str = safeBase64Str.replace('/', '_');

safeBase64Str = safeBase64Str.replaceAll("=", "");

安全ベース64Strを返送;

}


public static byte[] safeUrlBase64Decode(最終文字列 safeBase64Str){

文字列 base64Str = safeBase64Str.replace('-', '+');

base64Str = base64Str.replace('_', '/');

int mod4 = base64Str.length()%4;

IF(mod4 > 0){

base64Str = base64Str + "====".substring(mod4);

}

return new BASE64Decoder().decodeBuffer(base64Str);

}



Androidの場合、android.utils.Base64には以下の機能が搭載されています:

Base64.encodeToString(encrypted, Base64.URL_SAFE|Base64.NO_WRAP);

Base64.decode(data, Base64.URL_SAFE);




先の:アカウントロックアウトのセキュリティ戦略を使ってみて
次に:C#はWindowsとSQLserver認証のために2種類の接続文字列をSQLserverに接続します
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com