Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,028

HOME > PHP > PHP Forum > เข้ารหัสของ RSA (cryptosystem) outputออกมาเป็นอักษรขยะ



 

เข้ารหัสของ RSA (cryptosystem) outputออกมาเป็นอักษรขยะ

 



Topic : 136453



โพสกระทู้ ( 8 )
บทความ ( 0 )



สถานะออฟไลน์




การเข้ารหัสของ RSA (cryptosystem) ผมได้เขียนโค้ดการเข้ารหัสถอดรหัสแล้วติดปัญหาตรง output ที่ออกมาบางครั้งก็ออกมาสำเร็จแต่บางครั้งก็ผิดจะมีตัวอักษรขยะออกมา อยากทราบว่าเกิดจากส่วนไหนได้บ้างครับ

สำเร็จ
เข้ารหัสได้

fa
มีอักษรขยะและเข้ารหัสผิด

Code (PHP)
<?php
$plaintext = "Helloworld";
echo encrypt_RSA($plaintext);
// 1778686828772858572948091 
function encrypt_RSA($text)
{
    $a = [];
    $b = [];
    $p = 0;
    $q = 0;
     while (true) {
         $p = rand(1, 30);
     if (findPrime($p) == true) {
             break;
         }
     }

     while (true) {
         $q = rand(1,30);
        if (findPrime($q) == true) {
             break;
        }
     }

    $n = $p * $q;
    while (true) {
        $n1 = (($p - 1) * ($q - 1));
        $e = rand(1, $n1);

        if (gcd($e, $n1) == 1) {
            break;
        }
    }

    echo "Public key: " . $n . " , " . $e;
    print("\n");

    for ($i = 0; $i < $n1 - 1; $i++) {
        if (($i * $e) % $n1 == 1) {
            (float)$d = $i;
            break;
        }
    }
    echo "Private key: " . $d;


    for ($i = 0; $i < strlen($text); $i++) {
        $t = toNum($text[$i]);
        $t = myPowMod($t, $e, $n);
        array_push($a, $t);

        $t = toText($t);
        array_push($b, chr($t));
    }

    for ($x = 0; $x < count($a); $x++) {
        echo $a[$x] . "";
    }

    print("\n");
    for ($x = 0; $x < count($b); $x++) {
        echo $b[$x] . "";
    }
    print("\n");
    $a = null;
    $b = null;
}

function decrypt_RSA($text)
{
    $a = [];
    $b = [];
    $p = 0;
    $q = 0;
    $textLength = strlen($text);
    $textN=[];
    while (true) {
        $p = rand(1, 50);
        if (findPrime($p) == true) {
            break;
        }
    }

    while (true) {
        $q = rand(1, 50);
        if (findPrime($q) == true) {
            break;
        }
    }

    $n = $p * $q;
    while (true) {
        $n1 = ($p - 1) * ($q - 1);
        $e = rand(1, $n1);

        if (gcd($e, $n1) == 1) {
            break;
        }
    }
    echo "Public key: " . $n . " , " . $e;
    print("\n");

    for ($i = 0; $i < $n1 - 1; $i++) {
        if (($i * $e) % $n1 == 1) {
            (float)$d = $i;
            break;
        }
    }
    echo "Private key: " . $d;
    $textLength = strlen($text);
    $textN=[];

    for ($i = 0; $i < strlen($text); $i++) {
        $t = toNum($text[$i]);
        $t = myPowMod($t, $e, $n);
        $t = toText($t);
        echo chr($t);
       
    }
   

    //echo $b . "";
    // print_r($t);
   // print("\n");
  




    return 0;
}


function toNum($a)
{
    $a = ord($a) - (ord('z') - ord('a'));
    return $a;
}


function toText($a)
{
    $a = $a + (ord('z') - ord('a'));
    return $a;
}



function myPowMod($a, $b, $c)
{

    $x = 1;
    $a = $a % $c;
    if ($a == 0) {
        return 0;
    }
    while ($b > 0) {
        if (($b & 1) == 1) {
            $x = ($x * $a) % $c;
        }

        $b = (int)($b / 2);
        $a = ($a * $a) % $c;
    }
    return $x;
}

function gcd($a, $b)
{
    if ($a > $b) {
        $small = $b;
    } else {
        $small = $a;
    }
    for ($i = 1; $i < $small + 1; $i++) {
        if (($a % $i == 0) && ($b % $i == 0)) {
            $gcd = $i;
        }
    }


    return $gcd;
}


function findPrime($a)
{
    for ($i = 2; $i < $a - 1; $i++) {
        if ($a % $i == 0) {
            return 0;
        }
    }
    return 1;
}





Tag : PHP







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2021-11-02 16:09:40 By : fookpannawit View : 479 Reply : 1
 

 

No. 1



โพสกระทู้ ( 4,720 )
บทความ ( 8 )



สถานะออฟไลน์


ถ้าเขียนเองได้ขนาดนี้ ปัญหาตัวอักษรขยะตามที่ว่า ควรจะ debug ได้มั้ง
ตัวอักษร ? กรอบดำๆพวกนั้น เดาว่ามาจากการสั่ง chr แปลงตัวเลขเป็นตัวหนังสือ แล้วมันได้อักขระที่ไม่ถูกต้อง ก็น่าจะมาจากตัวเลขที่จะไปแปลงใน chr(nnn) มันไม่ถูก

ผมก็ไม่รู้จะไปตรวจหามันยังไง อาจจะแนะนำให้ทดลองกับ mb_chr mb_ord อะไรพวกนี้ที่มันรองรับ multi byte (php รุ่นใหม่ๆ)

หรือไม่ก็ใช้ที่ผมเคยทำแจกอันนี้ https://gist.github.com/ve3/0f77228b174cf92a638d81fddb17189d
ของผมนี้ไม่ได้เขียนเอง ไปเอามาจากคนอื่นอีกที (มีลิ้งค์ใน docblock ครบถ้วน) แต่ว่าผมเอามาเพิ่มเติมตัวเลือกการ encrypt method เองได้ แล้วใช้ข้ามกันระหว่าง PHP, JavaScript ได้ด้วย






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-11-02 17:47:22 By : mr.v
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : เข้ารหัสของ RSA (cryptosystem) outputออกมาเป็นอักษรขยะ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 00
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่