去Blowfish奇怪的东西

时间:2017-10-14 13:29:49

标签: go blowfish

我有以下函数使用Blowfish对字符串进行编码。如果我只将一个字符串放到字节数组中就可以了。问题在于线路     cipher.Encrypt(enc [0:],src)

func BlowFish(str string){
    key := []byte("super secret key")

    cipher,err := blowfish.NewCipher(key)
    if err != nil {
        log.Fatal(err)
    }


    //very weird that I get index out of range if I insert a var
    src :=[]byte(str+"\n\n\n")

    var enc [512]byte
    cipher.Encrypt(enc[0:],src)

    fmt.Println("Encoded",enc)

    var decrypt[8] byte
    cipher.Decrypt(decrypt[0:],enc[0:])

    result:=bytes.NewBuffer(nil)
    result.Write(decrypt[0:8])

    fmt.Println(string(result.Bytes()))
}

我不明白这个问题

2 个答案:

答案 0 :(得分:3)

虽然使用Go Blowfish可能会导致错误,但这是正确的。 Blowfish是一个64位(读取8字节)块密码。正如您所发现的,您的字符串不仅必须是带填充的8个字节,而且您要加密的任何数据都必须填充,以便所有块都等于8个字节。

为此,您应该检查数据的模数,并填充余数,以便数据的长度是8的倍数,就像这样。

var cube1, geo1, mat1;

function newbox2(){
    geo1 = new THREE.BoxGeometry(12, 4, 2);

    mat1 = new THREE.ShaderMaterial( {
        uniforms: {
            col: { type: 'f', value: 1.0 },
        },
        vertexShader: "void main() {gl_Position = projectionMatrix * modelViewMatrix * vec4(position.x+5.0, position.y, position.z+25.0, 1.0); }",
        fragmentShader: "uniform float col; void main() {gl_FragColor = vec4(col, 0.58, 0.06, 1.0);}"
    });

    cube1 = new THREE.Mesh(geo1, mat1);
    scene.add(cube1);   

    cube1.position.set(5, 5, 10);
}

答案 1 :(得分:0)

看起来我发现了什么问题。 cypher.Encrypt接受长度为8的字节数组。但字节数组[]字节(str +“\ n \ n \ n”)的长度为4.这就是为什么我得到一个超出范围的索引。如果我有一个array []字节(“我的str编码”+“\ n \ n \ n \ n”)。它的len是2个字符串的len。现在的解决方案是添加更多\ n字符,使数组的长度为str +“\ n ...... \ n”> => 8